12.4.23

Автоматизация проверки баз данных

Одной из обязательных задач администрирования баз данных MS SQL Server является периодическое восстановление баз, дабы убедиться, что база восстанавливается успешно. Ещё одной такой задачей является периодическая проверка баз посредством DBCC CHECKDB. Зачастую, полезно эти задачи объединить, и запускать проверку базы после восстановления её на специально предназначенном для этого сервере. Если у базы имеется несколько файловых групп и размер базы настолько большой, что проверка каждой занимает несколько часов, резонно проверять не всю база сразу, а поочерёдно все файловые группы. Сократить время проверки также можно отказавшись от проверки индексов, например вот так: DBCC CHECKFILEGROUP (‘PRIMARY’, NOINDEX).

Автоматизировать рутинные операции восстановления и проверки можно создав задачу по расписанию (job), которую лучше составить из нескольких отдельных шагов, чтобы после каждого шага можно было организовать отправку уведомлений DBA об успехе, и переход на следующий шаг при неудаче (когда это возможно). Кроме того, бывает полезно включить для каждого шага вывод результатов исполнения сценариев в историю работы задания. Это облегчит проверку результатов работы каждого шага. Ниже, на картинке, показано, как это может выглядеть:


Чаще всего для проверки используется последняя резервная копия. Ниже представлен пример сценария, который посредством присоединённого сервера выясняет имя файла последней резервной копии базы и составляет сценарий для запуска восстановления базы данных в том же расположении, где она находится на момент исполнения сценария. Сценарий предназначен только для примера, внесите в него все необходимые изменения для корректной работы в вашем окружении:

DECLARE @namebase AS varchar(33)

, @File1  AS nvarchar(4000), @File2  AS nvarchar(4000)

, @File3  AS nvarchar(4000), @File4  AS nvarchar(4000)

, @File5  AS nvarchar(4000), @File6  AS nvarchar(4000)

, @File7  AS nvarchar(4000)

-- имя последнего файла резервной копии

SELECT TOP 1 @namebase=SUBSTRING(bmf.physical_device_name, 23, 33)

FROM  [ВАШМОГУЧИЙСЕРВЕР].msdb.dbo.backupset bs

     ,[ВАШМОГУЧИЙСЕРВЕР].msdb.dbo.backupmediafamily bmf

     ,[ВАШМОГУЧИЙСЕРВЕР].msdb.dbo.backupmediaset bms

WHERE bs.media_set_id=bms.media_set_id

     AND bms.media_set_id=bmf.media_set_id

     AND bs.database_name = ВАШАБАЗА

     AND bs.type=‘D’

     AND SUBSTRING(bmf.physical_device_name, 23, 9) LIKE ВАШАБАЗА_backup’ -- тут должен быть ваш шаблон имени файла

ORDER BY backup_start_date DESC

 

SET @File1  = N’\\ВАШМОГУЧИЙСЕРВЕР\c$\MSSQL\BACKUP\01\ВАШАБАЗА\’ + @namebase +’01.bak’

SET @File2  = N’\\ВАШМОГУЧИЙСЕРВЕР\c$\MSSQL\BACKUP\02\ВАШАБАЗА\’ + @namebase +’02.bak’

SET @File3  = N’\\ВАШМОГУЧИЙСЕРВЕР\c$\MSSQL\BACKUP\03\ВАШАБАЗА\’ + @namebase +’03.bak’

SET @File4  = N’\\ВАШМОГУЧИЙСЕРВЕР\c$\MSSQL\BACKUP\04\ВАШАБАЗА\’ + @namebase +’04.bak’

SET @File5  = N’\\ВАШМОГУЧИЙСЕРВЕР\c$\MSSQL\BACKUP\05\ВАШАБАЗА\’ + @namebase +’05.bak’

SET @File6  = N’\\ВАШМОГУЧИЙСЕРВЕР\c$\MSSQL\BACKUP\06\ВАШАБАЗА\’ + @namebase +’06.bak’

SET @File7  = N’\\ВАШМОГУЧИЙСЕРВЕР\c$\MSSQL\BACKUP\07\ВАШАБАЗА\’ + @namebase +’07.bak’

 

RESTORE DATABASE [ВАШАБАЗА] FROM 

   DISK = @File1,

   DISK = @File2,

   DISK = @File3,

   DISK = @File4,

   DISK = @File5,

   DISK = @File6,

   DISK = @File7

WITH  FILE = 1, NOUNLOAD,  REPLACE,  STATS = 5, RECOVERY

Комментариев нет:

Отправить комментарий