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.
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