Задача
Иногда некоторые вещи, которые кажутся сложными, гораздо проще решить, чем вы думаете, и в этом сила T-SQL для решения повторяющихся задач. Одной из таких задач может быть необходимость резервного копирования всех баз данных на вашем сервере. Это не такая большая проблема, если у вас есть несколько баз данных, но бывают и такие ситуации, где более 100 баз данных на одном и том же экземпляре SQL Server. Вы можете использовать SQL Server Management Studio для резервного копирования баз данных или даже использовать планы обслуживания, но использование T-SQL является гораздо более простым и быстрым подходом в данной ситуации.
Решение
С помощью T-SQL вы можете генерировать команды резервного копирования, а с помощью курсоров вы можете по одной перемещаться по всем вашим базам данных для их резервного копирования. Это очень простой процесс, и вам нужно всего несколько команд для этого.
Как сделать резервную копию всех баз данных SQL Server
- Укажите путь для хранения резервных копий базы данных
- Укажите формат имени файла резервной копии
- Выберите список баз данных для резервного копирования
- Цикл по базам данных
- Программно создайте команду резервного копирования базы данных, используя имя базы данных, путь и формат имени файла
- Смотрите прикрепленный скрипт резервного копирования SQL Server
Формат имен файлов DBname_YYYYDDMM.BAK
Вот скрипт, который позволит вам сделать резервную копию каждой базы данных в вашем экземпляре SQL Server. Вам нужно будет изменить @path на соответствующий каталог резервного копирования.
DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
-- здесь указываем путь для сохранения бекапов
SET @path = 'C:\Backup\'
-- к имени файла добавим дату
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)
DECLARE db_cursor CURSOR READ_ONLY FOR
SELECT name
FROM master.sys.databases -- для старых версий master..sysdatabases
WHERE name NOT IN ('master','model','msdb','tempdb') -- исключить из списка следующие базы
AND state = 0 -- активные, рабочие базы
AND is_in_standby = 0 -- и не переведенные в режим для чтения
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '_' + @fileDate +'_FULL_' + '.BAK' -- для разностных меняем на DIFF
BACKUP DATABASE @name TO DISK = @fileName -- для разностных приписываем WITH DIFFERENTIAL
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
Комментариев 0