Задача
Настроить архивацию баз следующим образом.
1. Недельный бэкап с возможностью восстановления на любой момент времени. Срок хранения: 7 дней.
2) Месячный бэкап на 01 число месяца. Срок хранения: 12 месяцев.
3) Годовой бэкап на 01 января. Срок хранения: бессрочно.
У баз модель восстановления Полная (FULL).
Предисловие
На протяжении времени выходили разные версии MS SQL Server.
Я давно настраиваю архивацию баз на разных версиях MS SQL Server и могу сказать, что в каждой версии, в каждой среде возникают свои нюансы, разные причины, из-за которых то один компонент сбоит, то другой, то третий и т.д.
На сегодняшний день информация на разных сайтах показывает, что не только я один, а до меня не один специалист пришел к выводу: нормальную архивацию и мониторинг нужно делать скриптами и желательно своими.
Некоторые примеры, из которых можно сделать тот же вывод:
1) 1131561
2) helpme1c.ru
3) Forum MS
6) 126513
7) 85254
8) 63466
Тема резервного копирования баз данных описана во многих источниках, однако мониторинг до сих пор является узким местом.
Проблемы.
1) Многие источники описывают работу специальных программ, но часто бывает, что какие-либо программы нельзя устанавливать.
2) Движок MS SQL Server сбоит, поэтому нет уверенности, что бэкапы делаются. Нужен мониторинг, причем ежедневный.
3) Мониторинг тоже сбоит. Поэтому нужен такой мониторинг или такие правила, которые дадут знать, что случилось исключение. В идеале — это сторонний сервис мониторинга, но если такого сервиса нет, если у заказчика отсутствует возможность развернуть такой сервис, тогда приходится обходиться простыми и дешевыми инструментами, но не менее эффективными. На основе данной проблемы происходит другая проблема — необходимость в человеческом дежурстве, ведь мониторинг тоже может сбоить. Вообще, автоматизация — это человеческая надежда на стабильность автомата, но так как любой автомат может сбоить, то либо другой автомат проверяет работу своего брата (хотя оба могут сбоить), либо проверяет сам человек.
Исходя из описанных проблем, составляем дополнительные требования.
1) Инструменты архивации и мониторинга должны быть либо встроенными в среду MS SQL Server или в систему, либо должны быть портативными, не требующими установки. Таким образом мы не нагружаем реестр системы лишним «мусором».
2) Должен быть скрипт, проверяющий состояние архивации и сообщающий статус человеку.
3) Так как скрипт может сбоить, статус может не отправиться, и это тоже ошибка, так как в случае сбоя архивации мы не узнаем об отсутствии бэкапов. Поэтому скрипт должен отправлять статус ежедневно, и проверять этот статус нужно ежедневно: либо другой автомат, либо дежурный. Так как отсутствовала возможность создания другого автомата по проверке статусных сообщений, то пришлось разработать простую отправку письма на почту, в письме несколько получателей.
Выбранные инструменты.
1) Transact-SQL
2) Планировщик заданий Windows
3) OneScript.
Нужно сказать, что есть достаточно инструментов других, которые либо встроенные, либо не требуют установки, но когда открываешь их раз в год и некогда тратить драгоценное время, то приходится использовать то, на чем быстро решается задача. В данном случае таковыми инструментами для меня являются Transact-SQL, OneScript, Планировщик заданий Windows. Кстати, я собирался вместо OneScript использовать PowerShell, но оказалось, что с ним гораздо больше «подводных камней», а значит и вариантов сбоя (например, форматы дат, использование библиотек, в одной среде скрипт работает, в другой нет).
Схемы архивации и мониторинга
Как все это настроить?
1) Подготовка библиотек.
1.1) Правим файл Bases.os.
1.2) В каталоге «..\OneScript\lib» создаем каталог «bases» и добавляем в него файл Bases.os.
1.3) В командной строке устанавливаем библиотеку работы с почтой: E:\OneScript\bin\opm.bat install InternetMail.
2) Настройка еженедельной архивации баз и мониторинга.
2.1) В среде MS SQL Server настраиваем план обслуживания: раз в неделю создавать бэкапы в папке «F:\WEEK», с опцией «Создавать вложенный каталог для каждой базы данных».
2.2) Правим скрипт BackupWeekly.os.
2.3) Правим скрипт BackupWeekly.bat и добавляем его в планировщик заданий. По расписанию этот скрипт должен запуститься после завершения работы плана обслуживания (2.1) в этот же день.
3) Настройка ежемесячной архивации баз и мониторинга.
3.1) В среде MS SQL Server настраиваем план обслуживания: раз в месяц создавать бэкапы в папке «F:\MONTH», с опцией «Создавать вложенный каталог для каждой базы данных».
3.2) Правим скрипт BackupMonthly.os.
3.3) Правим скрипт BackupMonthly.bat и добавляем его в планировщик заданий. По расписанию этот скрипт должен запуститься после завершения работы плана обслуживания (3.1) в этот же день.
4) Настройка ежедневной архивации журналов транзакций и мониторинга.
4.1) В MS SQL Server включаем расширенные процедуры:
EXEC sp_configure 'show advanced options', 1 RECONFIGURE GO -- Enable the xp_cmdshell procedure EXEC sp_configure 'xp_cmdshell', 1 RECONFIGURE
4.2) Правим скрипт BackupLOG.SQL и в среде MS SQL Server в агенте добавляем новое задание, вставляем данный скрипт. Расписание, например, каждые 3 часа.
4.3) Правим скрипт BackupDaily.os.
4.4) Правим скрипт BackupDaily.bat и добавляем его в планировщик заданий. По расписанию этот скрипт должен запуститься после завершения работы задания (4.2).
Уязвимости
1) Человек может забыть, что письмо должно поступить, особенно, когда много разных писем.
2) Бэкапы хранятся только на одном диске. Исчез диск — исчезло все. Но возможно дописать копирование бэкапов в несколько мест.