Создание резервной копии всех баз данных в SQL Server
13
У меня есть сервер БД Microsoft SQL Server 2005. На сервере БД у меня около 250 пользовательских баз данных. Я должен сделать резервную копию всех этих баз данных. Поскольку ручное создание резервной копии занимает много времени, я ищу пакетный сценарий или сценарий БД, который автоматически создаст резервную копию всех 250 баз данных. Может ли кто-нибудь, пожалуйста, помочь в этом?
Примечание. Сначала создайте папку на D:диске. (например D:\User_DataBackup\)
Шаг 1: Создайте процедуру, приведенную ниже.
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
Шаг 2: Выполните описанную выше процедуру.
EXEC[UserDataBaseBackUp]
Вы также можете запланировать эту процедуру. Эта процедура проверена, надеюсь, это поможет.
Примечание. Экспресс-выпуски SQL Server не предлагают функциональность плана обслуживания.
Алан Б
8
Я точно знаю, что поддержка большого количества баз данных с помощью SSMS может немного сбить с толку, но это просто.
Я могу порекомендовать более эффективный способ, который использует сценарий обслуживания Олы Хелленгрен . Это очень круто и очень эффективно. И вы можете сделать гораздо больше, чем просто резервное копирование всех баз данных, вы можете выполнять все виды процедур обслуживания.
Например, вы можете сделать резервную копию всех баз данных, сжать их и зашифровать их с помощью сертификата по вашему выбору, используя такую команду (и все они являются необязательными, а шифрование и сжатие не будут работать на SQL Server 2005, но я думаю, что это будет показать гибкость и силу сценария Олы):
Работая над ответом JP, я добавил параметр для передачи директории назначения (и, вполне возможно, добавлю больше опций):
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
Вы можете использовать SELECT Statement или CURSOR следующим образом:
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
ИЛИ
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
Разработать план обслуживания
SQL Server имеет эту удивительную особенность, где он будет создавать сценарий и работу для вас
Шаг 1:
Щелкните правой кнопкой мыши
Maintenance Plan
подManagement
Шаг 2:
Назовите свой план
Шаг 3:
Выберите задачу резервного копирования базы данных
Шаг 4.
Настройте задачу, выберите «Базы данных», «Расположение папки», «Тип резервного подключения (полное, разностное, журнал транзакций)» и т. Д.
Шаг 5:
Настройте график работы
Я рекомендую иметь отдельный план для системных баз данных и ваших пользовательских баз данных. чтобы избежать каких-либо проблем
Справочные ссылки:
источник
Я точно знаю, что поддержка большого количества баз данных с помощью SSMS может немного сбить с толку, но это просто.
Я могу порекомендовать более эффективный способ, который использует сценарий обслуживания Олы Хелленгрен . Это очень круто и очень эффективно. И вы можете сделать гораздо больше, чем просто резервное копирование всех баз данных, вы можете выполнять все виды процедур обслуживания.
Например, вы можете сделать резервную копию всех баз данных, сжать их и зашифровать их с помощью сертификата по вашему выбору, используя такую команду (и все они являются необязательными, а шифрование и сжатие не будут работать на SQL Server 2005, но я думаю, что это будет показать гибкость и силу сценария Олы):
источник
Работая над ответом JP, я добавил параметр для передачи директории назначения (и, вполне возможно, добавлю больше опций):
Итак, тогда:
источник
Вы можете использовать SELECT Statement или CURSOR следующим образом:
ИЛИ
источник
Вы также можете использовать PowerShell, как показано в разделе «Использование PowerShell для резервного копирования всех пользовательских баз данных » Бака Вуди:
источник