Hacer una copia de seguridad de todas las bases de datos en SQL Server
13
Tengo un servidor Microsoft SQL Server 2005 DB. En el servidor DB, tengo alrededor de 250 bases de datos de usuarios. Tengo que hacer una copia de seguridad de todas estas bases de datos. Dado que la copia de seguridad manual consume mucho tiempo, estoy buscando un script Batch o un script DB que automáticamente realice la copia de seguridad de las 250 bases de datos. ¿Alguien puede ayudarme en esto?
Nota: Primero cree una carpeta en la D:unidad. (por ejemplo D:\User_DataBackup\)
Paso 1: cree un procedimiento que se proporciona a continuación.
CreatePROCEDURE[dbo].[UserDataBaseBackUp]ASBEGINSET NOCOUNT ON;DECLARE@name VARCHAR(50)-- database nameDECLARE@path VARCHAR(256)-- path for backup filesDECLARE@fileName VARCHAR(256)-- filename for backupDECLARE@fileDate VARCHAR(20)-- used for file nameSET@path ='D:\User_DataBackup\' -- as same as your created folder'SELECT@fileDate =CONVERT(VARCHAR(20),GETDATE(),104)DECLARE db_cursor CURSORFORSELECT name
FROM MASTER.dbo.sysdatabases
WHERE name NOTIN('master','model','msdb','tempdb','ReportServer','ReportServerTempDB')OPEN db_cursor
FETCH NEXT FROM db_cursor INTO@name
WHILE@@FETCH_STATUS =0BEGINSET@fileName =@path +@name +'_'+@fileDate +'.BAK'BACKUPDATABASE@name TODISK=@fileName
FETCH NEXT FROM db_cursor INTO@name
ENDCLOSE db_cursor
DEALLOCATE db_cursor
END
Paso 2: Ejecute el procedimiento anterior.
EXEC[UserDataBaseBackUp]
También puede programar este procedimiento. Este procedimiento se prueba con suerte, ayudará.
Paso 3:
Seleccione la tarea de copia de seguridad de la base de datos
Paso 4:
configure la tarea, seleccione las bases de datos, la ubicación de la carpeta, el tipo de conexión de respaldo (completa, diferencial, registro de transacciones), etc.
Paso 5:
Configurar la programación del trabajo
Recomiendo tener un plan separado para las bases de datos del sistema y sus bases de datos de usuario para evitar cualquier tipo de problema.
Nota: Las ediciones Express de SQL Server no ofrecen la funcionalidad del Plan de mantenimiento.
Alan B
8
Sé con certeza que mantener muchas bases de datos con SSMS podría ser un poco confuso, pero es sencillo.
Puedo recomendar una forma más efectiva, usando el script de mantenimiento de Ola Hallengren . Es muy genial y muy efectivo. Y puede hacer mucho más que simplemente hacer una copia de seguridad de todas las bases de datos, puede hacer todo tipo de procedimientos de mantenimiento.
Por ejemplo, puede hacer una copia de seguridad de todas las bases de datos, comprimirlas y cifrarlas con un certificado de su elección, utilizando un comando como este (y todas son opcionales, y el cifrado y la compresión no funcionarán en SQL Server 2005, pero creo que lo hará muestra la flexibilidad y la fuerza del guión de Ola):
Trabajando en la respuesta de JP, agregué un parámetro para pasar el directorio de destino (y posiblemente agregue más opciones):
CreatePROCEDURE[dbo].[UserDataBaseBackUp](@OutputDir varchar(255))ASBEGINSET NOCOUNT ON;DECLARE@name VARCHAR(50)-- database nameDECLARE@path VARCHAR(256)-- path for backup filesDECLARE@fileName VARCHAR(256)-- filename for backupDECLARE@fileDate VARCHAR(20)-- used for file nameSET@path =@OutputDir
SELECT@fileDate =CONVERT(VARCHAR(20),GETDATE(),104)PRINT'Starting Backups'DECLARE db_cursor CURSORFORSELECT name FROM MASTER.dbo.sysdatabases
WHERE name NOTIN('master','model','msdb','tempdb','ReportServer','ReportServerTempDB')OPEN db_cursor
FETCH NEXT FROM db_cursor INTO@name
WHILE@@FETCH_STATUS =0BEGINSET@fileName =@path +@name +'_'+@fileDate +'.BAK'PRINT'Starting Backup For '+@name
BACKUPDATABASE@name TODISK=@fileName WITH FORMAT
FETCH NEXT FROM db_cursor INTO@name
ENDCLOSE db_cursor
DEALLOCATE db_cursor
PRINT'Backups Finished'END
GO
Puede usar la instrucción SELECT o el CURSOR de esta manera:
DECLARE@PathForBackUp VARCHAR(255)SET@PathForBackUp ='F:\Backup\User DB\'
SELECT 'BACKUPDATABASE[' + name + ']TODISK= N''' + @PathForBackUp + '' + name + '.bak''WITH NOFORMAT, NOINIT, NAME = N''' + name + '_FullBackUp'', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS =5'FROM sys.databases
WHERE database_id >4
O
DECLARE@DBName VARCHAR(255)DECLARE@PathForBackUp VARCHAR(255)DECLARE@FileName VARCHAR(255)DECLARE@DateFile VARCHAR(255)DECLARE@SQL NVARCHAR(2048)SET@PathForBackUp ='F:\Backup\User DB\'
SET @DateFile = REPLACE(REPLACE(CONVERT(VARCHAR(20),GETDATE(),120) ,'','T'), ':','')
DECLARE BACKUPING CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases WHERE dbid > 4
OPEN BACKUPING
FETCH NEXT FROM BACKUPING INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @FileName = @PathForBackUp + @DBName + '_' + @DateFile + '.BAK'
SET @SQL = 'BACKUPDATABASE'+@DBName+ 'TODISK='''+@FileName+'''WITH COMPRESSION 'PRINT@SQL
EXECUTE sp_executesql @sql
FETCH NEXT FROM BACKUPING INTO@DBName
ENDCLOSE BACKUPING
DEALLOCATE BACKUPING
Desarrollar un plan de mantenimiento
SQL Server tiene esta característica sorprendente donde creará el script y el trabajo para usted
Paso 1:
haga clic derecho
Maintenance Plan
debajoManagement
Paso 2:
nombra tu plan
Paso 3:
Seleccione la tarea de copia de seguridad de la base de datos
Paso 4:
configure la tarea, seleccione las bases de datos, la ubicación de la carpeta, el tipo de conexión de respaldo (completa, diferencial, registro de transacciones), etc.
Paso 5:
Configurar la programación del trabajo
Recomiendo tener un plan separado para las bases de datos del sistema y sus bases de datos de usuario para evitar cualquier tipo de problema.
Enlaces de ayuda:
fuente
Sé con certeza que mantener muchas bases de datos con SSMS podría ser un poco confuso, pero es sencillo.
Puedo recomendar una forma más efectiva, usando el script de mantenimiento de Ola Hallengren . Es muy genial y muy efectivo. Y puede hacer mucho más que simplemente hacer una copia de seguridad de todas las bases de datos, puede hacer todo tipo de procedimientos de mantenimiento.
Por ejemplo, puede hacer una copia de seguridad de todas las bases de datos, comprimirlas y cifrarlas con un certificado de su elección, utilizando un comando como este (y todas son opcionales, y el cifrado y la compresión no funcionarán en SQL Server 2005, pero creo que lo hará muestra la flexibilidad y la fuerza del guión de Ola):
fuente
Trabajando en la respuesta de JP, agregué un parámetro para pasar el directorio de destino (y posiblemente agregue más opciones):
Por lo que entonces:
fuente
Puede usar la instrucción SELECT o el CURSOR de esta manera:
O
fuente
También puede usar PowerShell como se muestra en Usar PowerShell para respaldar todas las bases de datos de usuario de Buck Woody:
fuente