Резервирование БД MS SQL 2008
Возникла необходимость автоматизировать создание резервных копий БД MS SQL. Честно говоря, раньше с этим зверем не работал и как-то сторонился
Но нужно, значит - нужно! С чего начать? Думаю, с основных понятий, т.е. типов backup-ов. Их бывает несколько, но мы рассмотрим цепочку и варианты реализации для, более-менее, серъёзной БД с кучей таблиц и данных, мало того, запись ведётся чуть не каждую минуту. Каждая команда о создании backup-а - дополнительная нагрузка на сервер.
Итак, типы backup-ов:
- Полное резервирование Full Backup Полное резервирование обычно затрагивает всю вашу систему и все файлы. Применяют полное резервирование, в зависимости от важности и объёма данных.
- Дифференциальное резервирование Differential Backup При дифференциальном резервировании каждый файл, который был изменен с момента последнего полного резервирования, копируется каждый раз заново. Дифференциальное резервирование ускоряет процесс восстановления. Все, что вам необходимо, это последняя полная и последняя дифференциальная резервная копия. Т.е. - диф.копия - это все изменения, начиная от момента создания Полного резервирования по момент создания диф.копии.
- Добавочное резервирование Incremental Backup При добавочном ("инкрементальном") резервировании происходит копирование только тех файлов, которые были изменены с тех пор, как в последний раз выполнялось полное или добавочное резервное копирование. Последующее добавочное резервирование добавляет только файлы, которые были изменены с момента предыдущего добавочного резервирования. В среднем, добавочное резервирование занимает меньше времени, так как копируется меньшее количество файлов. Однако, процесс восстановления данных занимает больше времени, так как должны быть восстановлены данные последнего полного резервирования, плюс данные всех последующих добавочных резервирований. При этом, в отличие от дифференциального резервирования, изменившиеся или новые файлы не замещают старые, а добавляются на носитель независимо.
- Пофайловый метод Система пофайлового резервирования запрашивает каждый индивидуальный файл и записывает его на носитель.
- Метод отображающего дублирования диска Обычный аппаратный RAID. Он помогает лишь в случае выхода из строя винчестера. ИМХО, при использовании БД - иметь обязательно.
- Метод зеркалирования данных Метод, при котором данные зеркалируются на другой сервер.
Давайте рассмотрим нежелательную ситуацию. А именно: по какой-то причине вышла из строя БД. Что есть у нас? Полная копия, диференциальная копия на вчера, но на сегодня тоже есть данные, неужели нужно было делать диф.копирование каждый час? - Нет! Есть Журнал транзакций.
Журнал транзакций - журнал, в который записываются все транзакции и все изменения базы данных, выполняемые каждой транзакцией. Т.е. любое действие с БД пошагово запысается в журнал. Каждая запись отмечается СУБД на предмет завершённости транзакции, выполнена или нет. С его помощью, можно восстановить состояние БД не только после сбоя, а и при непредвиденных действиях с данными. Откатить до определённого времени. Как и с БД, с журналом транзакций нужно проводить резервное копирование, полное, дифференциальное, инкрементное. Для восстановления части журнала транзакций после сбоя в промежутке между созданием резервных копий, нужно выполнить резервирование заключительного фрагмента журнала, который, по-сути, является точкой финализации резервного копирования. Выполняется после сбоя, как точка обратного отсчёта.
Итак, для восстановления БД после сбоя нам нужны - актуальная полная копия БД, дифференциальная копия БД и копия журнала транзакций.
Для самой базы данных существует 3 модели восстановления - простая, полная и модель с неполным протоколированием. Рассмотрим:
- Простая модель (Simple) - используется только полное резервирование. Нет диф. резервирования, как и резервирования журнала транзакций. Полные копии нужно создавать как можно чаще. Актуально для БД, используемых "только для чтения".
- Модель полного восстановления (Full) - наиболее применяемая модель, при которой доступны все функции резервного копирования данных и их восстановление. Поддерживает восстановление отдельных страниц данных. Происходит полное протоколирование транзакций сохраниние журнала транзакций.
- Модель с неполным протоколированием (Bulk-Logged) - предназначена, как дополнение к полной модели полного восстановления. Не поддерживает протоколирование большинство массовых операций, соответственно - не поддерживает восстановление БД до определённого момента времени.
Рассмотрим наиболее актуальную цепочку создания резервных копий: Полное резервирование - раз в неделю, Дифференциальное резервирование - раз в день, Резервирование журнала транзакций - раз в час.
Есть несколько вариантов создания резервных копий:
- С помощью встроенного планировщика задач MS SQL
- С помощью языка Transact-SQL
- С помощью sqlcmd и Планировщика задач ОС
- Вручную (что нас не устраивает, ибо тру админ должен постоянно бездельничать)
Рассмотрим первый вариант, как наиболее юзабельный. Для этого используется Windows Server 2008 R2 Enterprise и MS SQL Server 2008 Eng.
Итак, допустим, что у нас есть БД TECH:
Переходим к инструменту создания Джобы:
Трём правую клавишу мышака и вызываем Мастера Джобу:
Выбираем галочку "Отдельное выполнение каждого задания", мы ведь выполняем только одно действие
Мастер без тюрбана, но ведь не в размере тюрбане главное )) Выбираем тип желания, в нашем случае - полное резервирование:
Мастер Джоба, как оказалось, чуточку немного еврей, поэтому переспрашивает ещё раз:
"Параметры дополнительные выбрать стоит, о юнный паддаван!":
здесь выбираем БД, срок хранения резервной копии, адрес (лента или диск), путь сохранения и главное - планировщик заданий!
"Не стоит о базе данных забывать при выборе своём. Сконцентрируй силу и выбери БД":
"Слишком быстро ты спешишь задание создать, нажать на кнопку стоит, что внизу с названием Shedule - Define".
Собсно, планировщик заданий, где выбираем тип (повторение, единожды и т.д.), день, время, тип старта:
Вот и всё, создали. Мастер Джоба крут и зелен. Смотрим в Maintance Plans состояние:
Для параноиков, не бойтесь в этом признаться зеркалу, стоит заглянуть в душу SQL Server Agent - Job Activity Monitor, Мастер Джоба подробно покажет всё:
Теперь, при удовлетворении заданных условий, должен создаться полный бэкап БД. По такому же принципу, создаётся диф.резервирование и резервирование журнала транзакций (эти подпункты разположены ниже "Полное резервирование" в списке выбора заданий).
Крутите уши MSSQL-ю, как Вам удобно, не отвертите
В следующей статье - создание с помощью Transact-SQL и пара примеров.
В статье использовались данные с форума, также - выжатая суть из Microsoft.TechNet.