seguridad script para hacer generate datos crear copias automatico database sql-server-2008 backup

database - generate - script para hacer backup de base de datos sql server



Copias de seguridad automatizadas de SQL Server (3)

¿Cuáles son las recomendaciones de los productos de software para crear copias de seguridad automatizadas de las bases de datos de SQL Server 2008?

La copia de seguridad debería realizarse sin tener que desconectar o desconectar la base de datos.


Recomendaría simplemente crear un plan de mantenimiento en SQL Server para manejar las copias de seguridad, puede configurarse para realizar copias de seguridad en una ubicación específica en momentos específicos, sin tener que desconectar las bases de datos, y gestionará la limpieza incremental de la copia de seguridad.

http://msdn.microsoft.com/en-us/library/ms189715.aspx


Luché con esto por un tiempo porque no era obvio cómo trabajar en un régimen que producía archivos con diferentes nombres para que una carrera no sobreescribiera la otra. Al final, creó el siguiente archivo por lotes de Windows

:: Daily Backup of SQLSERVER databases :: AKC 30 Apr 2011 :: :: Set environment variables SET SQLCMDPASSWORD=xxxxxx SET BACKUPDIR=C:/backups/db/ SET SCRIPTDIR=D:/Public/DB/batch_scripts/ :: Issue backup commands from a sql script SQLCMD -U a_backup -S SERVER/SQLEXPRESS -i %SCRIPTDIR%daily_backup.sql :: Tidy Up Old Backup Files (keep for 5 days) FORFILES /P %BACKUPDIR% /S /M "*.bak" /D -5 /C "cmd /c del @path"

donde a_backup es mi inicio de sesión de sqlserver con privilegios de copia de seguridad. El sql correspondiente es

DECLARE @thistime nvarchar(25); DECLARE @filename nvarchar(255); SET @thistime = CONVERT(nvarchar,GETDATE(),126); SET @filename = "$(BACKUPDIR)" + N''PASL'' + SUBSTRING(@thistime,1,10) + N''_DB.bak''; BACKUP DATABASE DB_live TO DISK = @FILENAME WITH INIT; GO

El descubrimiento del comando "FORFILES" para purgar archivos antiguos fue el hallazgo clave para mí.

Los registros de transacciones equivalentes son

:: Transaction Log Backups of SQLSERVER databases :: AKC 30 Apr 2011 :: Run at reasonably spread out times of the day :: Set environment variables SET SQLCMDPASSWORD=xxxxxx SET BACKUPDIR=C:/backups/db/ SET SCRIPTDIR=D:/Public/DB/batch_scripts/ :: Issue backup commands from a sql script SQLCMD -U a_backup -S SERVER/SQLEXPRESS -i %SCRIPTDIR%tlog_backup.sql

con archivo sql

DECLARE @thistime nvarchar(25); DECLARE @filename nvarchar(255); SET @thistime = CONVERT(nvarchar,GETDATE(),126); SET @filename = "$(BACKUPDIR)" + N''PASL'' + SUBSTRING(@thistime,1,10) + SUBSTRING(@thistime,11,3) + N''_LOG.bak''; BACKUP LOG DB_live TO DISK = @FILENAME WITH INIT; GO

Debo señalar que los archivos de la base de datos están en mi unidad D :, por lo que tomé las copias de seguridad en la unidad C :.

La copia de seguridad diaria se ingresa como un trabajo en el Programador de tareas de Windows para ejecutarse diariamente a las 4:00 a.m. La copia de seguridad del registro de transacciones está configurada para ejecutarse diariamente a las 8:00 a.m. con una repetición cada 4 horas que finaliza después de 13 horas (lo que hace que se ejecute a las 8 a.m. del mediodía, a las 4 p.m. y 8 p.m. todos los días)


Si está utilizando SQL Server Express , no encontrará una IU para ejecutar copias de seguridad periódicas.
En este caso, debe ejecutar un lote utilizando tareas programadas de Windows o algo similar.

No olvide utilizar un usuario con suficientes privilegios para acceder a SQL Server.

En el archivo por lotes

"C:/Program Files/Microsoft SQL Server/100/Tools/Binn/SQLCMD.EXE" -S (local)/SQLExpress -i D:/dbbackups/SQLExpressBackups.sql

En SQLExpressBackups.sql

BACKUP DATABASE MyDataBase1 TO DISK = N''D:/DBbackups/MyDataBase1.bak'' WITH NOFORMAT, INIT, NAME = N''MyDataBase1 Backup'', SKIP, NOREWIND, NOUNLOAD, STATS = 10 BACKUP DATABASE MyDataBase2 TO DISK = N''D:/DBbackups/MyDataBase2.bak'' WITH NOFORMAT, INIT, NAME = N''MyDataBase2 Backup'', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO