SQL Server - Copia de seguridad para cada dia de la semana

   
Vista:
Imágen de perfil de nano

Copia de seguridad para cada dia de la semana

Publicado por nano (4 intervenciones) el 14/09/2015 21:16:16
Muy buenas a todos!!!
Tengo un script para hacer una copia de seguridad de una base de datos de SQL SERVER para cada día de la semana con la secuencia Conta_1(lunes), Conta_2(Martes)... y así hasta el Domingo que os detallo a continuación:


DECLARE @dest nvarchar(255)
SET @dest = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Backup\Conta_' + CAST(DATEPART(weekday, GETDATE()) AS nvarchar(1))
BACKUP DATABASE [ContaHome] TO DISK = @dest
WITH NOFORMAT, NOINIT,
NAME = N'ContaHome-Completa Base de datos Copia de seguridad',
SKIP,
NOREWIND,
NOUNLOAD,
STATS = 10
GO


El problema después de una semana completa es que si la copia del lunes pasado ocupaba 150 Mb, hoy lunes me ha vuelto a crear el fichero pero con 300 Mb., es decir, que me la incrementa, de tal forma que acabaré sin espacio en el disco, pues la idea era tener las siete ultimas copias y despreocuparme.
A ver si alguien me puede echar un cable sobre que puede estar mal o de porqué me la añade...
Muchas Gracias de antemano,
Nano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Copia de seguridad para cada dia de la semana

Publicado por Rafael (88 intervenciones) el 15/09/2015 08:53:32
A ver te la reutiliza por que tiene el mismo nombre que el respaldo de la semana anterior, lo suyo seria:

1. Borrar previamente el de la semana anterior.
2. Proporcionar un nombre diferente si incluyes la fecha completa seguro lo tienes, pero esto no elimina el fichero anterior por lo que en cuestion de espacios continuas incrementando el ocupado.
3. Poner correctamente los parametros del Backup...

Veamos de acuerdo a la Documentación de SQL Server tu pones las siguientes opciones:

NOINIT .- Esto le indica que agregue la nueva informacion a lo ya existente preservando ambas...

Lo suyo seria INIT que le permite sobrescribir siempre y cuando las opciones de retencion de dias y expiracion lo permitan, ambas opciones no estan inicializadas en tu backup original.
Por lo que podrias definirle
RETAINDAYS = 6

Con lo cual tu script deberia quedar tal que asi:
1
2
3
4
5
6
7
8
9
10
11
DECLARE @dest nvarchar(255)
SET @dest = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Backup\Conta_' + CAST(DATEPART(weekday, GETDATE()) AS nvarchar(1))
BACKUP DATABASE [ContaHome] TO DISK = @dest
WITH NOFORMAT, INIT,
NAME = N'ContaHome-Completa Base de datos Copia de seguridad',
SKIP,
NOREWIND,
NOUNLOAD,
RETAINDAYS = 6,
STATS = 10
GO

Y con ello la proxima semana solo conservas lo que quieres conservar.

Saludos. (si te sirve un mas uno no viene mal)

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de nano

Copia de seguridad para cada dia de la semana

Publicado por nano (4 intervenciones) el 16/09/2015 08:43:35
Tienes toda la razón Rafael...
Es el valor NOINIT el que no me reinicializaba el backup y me lo sumaba al anterior llenandome el disco duro.
No quiero aprovecharme de tus conocimientos pero la siguiente idea es que cada backup se renombrara con el formato "Conta_(fechadeldia)", y con el valor RETAINDAYS entiendo que haría las de los ultimos seis días... es posible?
Muchas gracias por tu inestimable aportación cuyo +1 te has ganado a pulso!!!!
Un saludo,
Nano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Copia de seguridad para cada dia de la semana

Publicado por Rafael (88 intervenciones) el 16/09/2015 09:23:50
No capto la idea, quieres que se renombre el fichero a la fecha del dia y guarde los ultimos 6 dias ???

Y solo tener un fichero o como ????
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de nano

Copia de seguridad para cada dia de la semana

Publicado por nano (4 intervenciones) el 16/09/2015 09:31:19
Efectivamente...
En vez de guardar Conta_1,Conta_2 y asi hasta el 7... Que me los guardara como Conta_16092015, mañana como Conta_17092015 de la semana y volviera otra vez al lunes para tener la ultimas siete copias realizadas.
Supongo que es algo retorcido pero por intentarlo que no quede...
Gracias de nuevo por tu interés.
Saludos,
Nano.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Copia de seguridad para cada dia de la semana

Publicado por Rafael (88 intervenciones) el 16/09/2015 10:29:33
Creo ahi lo mas sencillo es que lo hicieras por sistema operativo, es decir lanzas el respaldo, y en el sistema operativo borras el fichero que supere los 7 dias...

En un fichero BATCH (*.BAT) o (*.CMD) que asocias al programador de tareas de Windows le pones algo asi

1
2
3
set RUTA_TUNNING='C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Backup\'
set DIAS=7
FORFILES /P %RUTA_TUNNING% /S /M *.* /D -%DIAS% /C "CMD /C IF @ISDIR==FALSE del /F /Q @FILE"

Y en el caso del script para generar el respaldo cambias el nombre del fichero por:
1
SET @dest = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\Backup\Conta_' + CONVERT(varchar, GETDATE(), 112)

Esto te debe dejar el nombre del fichero
Conta_yyyymmdd
Vaya poner el formato añomesdia te permite que se ordenen los ficheros de menor a mayor correctamente

Y mezclando este par de detalles pues lo tienes.

Espero te sirva

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar