Одной из обязательных задач администрирования баз данных 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
Комментариев нет:
Отправить комментарий