воскресенье, 21 ноября 2010 г.

Оперативный бэкап средствами SQL 2005

Пошаговая инструкция по настройке оперативного бэкапа SQL 2005 и Maintenance Plan, как примапить сетевой диск из SQL. Процедура восстановления после сбоя.


В качестве вступления, хотел бы отметить, что данная инструкция ни в коей мере не претендует на "истину в последней инстанции", такая задача не ставилась. Просто скомпилировал некоторый опыт, который, вероятно, может быть вам полезен в практике. Итак...

Имеется: рабочий сервер БД с СУБД SQL 2005 (9.0), с несколькими БД 1C 8;

1 раз в сутки выполняется резервное копирование полного бэкапа на ленту;



Задача:

Обеспечить оперативное резервное копирование в течение дня, а именно:

- иметь полную копию на начало дня , хранится 1 сутки, затем перезаписывается;

- иметь копии Transaction Log (TL) через каждые 20 минут;

- актуальность копий Transaction Log 1 сутки, по прошествии - должны удаляться;

- оперативные бэкапы хранятся на сетевом диске (NAS);



Решение:

Необходимое условие: пользователь, под которым запускается SQL Server agent (ну и SQL Server, на всякий случай), должен иметь права на сетевой ресурс NAS сервера, куда будут складываться бэкапы. Кроме того, Recovery Model базы, которую планируется бэкапить должна быть Full.

1. Обеспечить возможность поключения SQL сервера к сетевому диску N:.

1.1. Предварительная операция, требуется для включения расширенных опций SQL 2005 (Т-SQL):



-- To allow advanced options to be changed.

EXEC sp_configure 'show advanced options', 1

GO

-- To update the currently configured value for advanced options.

RECONFIGURE

GO

-- To enable the feature.

EXEC sp_configure 'xp_cmdshell', 1

GO

-- To update the currently configured value for this feature.

RECONFIGURE

GO



1.2. Непосредственно подключение логического диска (T-SQL):



EXEC xp_cmdshell 'net use N: \\SRV-nas\1c_backup'

GO



2. Настраиваем Maintenance Plan (MP) из 2-х подпланов:

- subplan_1 - полный бэкап по расписанию;

- subplan_2 - бэкап Transaction log и удаление бэкапов Transaction log с датой ранее 1 дня, по расписанию ;

2.1. Полный бэкап (Full) будет перезаписываться поверх предыдущего, поэтому создаем Backup Device на сетевом диске (T-SQL)*:



USE master

EXEC sp_addumpdevice 'disk', 'FULLBAK', '\\SRV-nas\1c_backup\FullBak.bak'

GO

Таким образом, в Server Objects\Backup device появляется новое устройство FULLBAK.

2.2. Запускаем мастер Мaintenance Рlan Wizard.

2.3. Указываем Separate shedules for each task (отдельные расписания для каждой задачи)

2.4. В задачах выбираем: – Back up Database (FULL); - Back up Database (Transaction Log),

т.о. получаем 2 подплана;

2.5.Настраиваем subplan_1: выбираем базы для копирования, выбираем Back up databases across one or more files, кнопкой ADD выбираем подключенное устройство FULLBAK, в If backup files exist выбираем “owerwrite”, настраиваем расписание для выполнения задачи Shedule кнопкой change - выполнение каждый день в определенное время (в моем случае до начала рабочего дня, в 7:00).

2.6. Настраиваем subplan_2:

- выбираем базы для копирования;

- выбираем create a backup file for every database

- указываем путь к папке на диске N:, куда будут складываться бэкапы TL;

- настраиваем расписание Shedule - каждые двадцать минут в интервале, например, с 07:20 до 23:00;

2.7. Сохраняем, открываем на редактирование (Modify в дереве Management\Maintenance plans) наш сохраненный Maintenance Plan.

2.8. В subplan_2 drag-and-drop мышью добавляем из Toolbox задачу Maintenance Cleanup Task.

2.9. Щелкаем Edit по этой задаче, в пункте Search folder and delete files based on an extension, поле Folder выбираем папку, куда складываются файлы бэкапа Transaction Log. В поле File extension (расширение файлов) ставим trn. В Delete files older than following, согласно задаче, ставим 1 сутки. Соединяем стрелкой обе подзадачи (бэкап и удаление), чтобы они выполнялись по одному расписанию.



3.0. Сохраняем наш Maintenance Plan, он готов к выполнению.



4. Теперь о процедуре восстановления в случае сбоя в течение рабочего дня.

4.1. Сделать вручную выгрузку бэкап Transaction Log, чтобы зафиксировать последние данные на момент сбоя.

4.2. Восстановить утренний Полный бэкап

4.3. Восстановить последовательно все бэкапы Transaction Log, включая сохраненный п. 4.1.

4.4. Т.о. база находится в состоянии "до сбоя".





Источники:

http://www.itcommunity.ru/blogs/rsug/archive/2009/02/27/55814.aspx

http://dev.net.ua/blogs/kosinsky/archive/2009/02/27/7810.aspx

http://msdn.microsoft.com/en-us/library/ms190693.aspx

http://www.sql-server-performance.com/articles/dba/creating_backup_jobs_p1.aspx

http://www.sql.ru/

http://razbezhkin.rpod.ru/all/

http://www.gilev.ru/1c/mssql/backup.htm

и т.д.


* Есть альтернативный вариант, при котором так же, как и для бэкапа Transaction Log, можно обойтись без создания Backup Device , воспользовавшись Create a backup file for every database. Это несколько упростит процедуру, но не расширит ваши знания. )