Простой скрипт для бекапа всех баз на сервере SQL


Задача

Иногда некоторые вещи, которые кажутся сложными, гораздо проще решить, чем вы думаете, и в этом сила 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

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.