• Обсуждения на сайте Альта-Софт

Настройка бэкапа MSSQL Express на примере 2005.

Модераторы: Renat, Gala, alta_olg, Lemur, expert

Ответить
warner
Почетный участник
Сообщения: 130
На форуме: c 25 фев 2010
Сказал: 14 ед.
Получил: 17 ед.

Настройка бэкапа MSSQL Express на примере 2005.

Сообщение warner »

Как мы знаем MS SQL Server 2005 Express Edition хорошо тем, что абсолютно бесплатен. А дальше начинаются проблемы. Размер одной базы ограничен 4 Gb, сервер может использовать не более 1Gb оперативной памяти и 1 процессора. В принципе для средних баз и не очень большого числа пользователей это то, что нужно. Гораздо больше меня напрягает отсутствие встроенной возможности автоматического создания бэкапов. К сожалению, Альта-ГТД не работает с другими базами (всё хочу попробовать запустить на PostgreSQL от Ethersoft, но времени вечно нет((. Поэтому хочу рассказать о найденном в интернете способе автоматизировать резервное копирование.
1. По адресу http://www.sqldbatips.com/showcode.asp?ID=26 скачиваем хранимую процедуру (или вот
code_9_expressmaint.zip
(7.72 КБ) 519 скачиваний
). Она для 2005 сервера. Для 2008 на этом же сайте есть консольная программа, и примеры по её использованию. Я же здесь расскажу только о этой процедуре. После скачивания извлекаем из архива expressmaint.txt и запускаем на сервере. Я воспользовался MS SQL Management Studio.
2. С помощью этой процедуры можно делать следующие вещи:
  • Создание полных архивных копий
  • Создание разностных копий
  • Создание копий лога
  • Перестройка индексов
  • Реорганизация индексов
  • Проверка целостности баз
  • Формирование отчетов о выполнении операций
3. Создаём файл full_db_backup.sql с содержимым

Код: Выделить всё

exec expressmaint
   @database      = 'ALL_USER',
   @optype        = 'DB',
   @backupfldr    = 'D:\Backup\backups_sql',
   @reportfldr    = 'D:\Backup\reports_sql',
   @verify        = 1,
   @dbretainunit  = 'copies',
   @dbretainval   = 10,
   @rptretainunit = 'copies',
   @rptretainval  = 10,
   @report        = 1
@database указывает базу данных, для которой нужно выполнить действия. Может быть указано или имя конкретной базы данных, или ALL_USER когда нужно выполнить для всех пользовательских баз данных или ALL_SYSTEM для всех системных баз данных.
@optype - что нужно сделать.
  • DB – создание полной резервной копии
    DIFF – создание разностной резервной копии
    LOG – создание копии лога
    CHECKDB – проверка целостности
    REINDEX – перестроить все индексы
    REORG – реорганизовать все индексы
@backupfldr - путь к папке для записи данных. Для каждой базы будет создана своя подпапка.
@reportfldr - путь к папке для сохранения логов.
@verify - проверять или нет файл резервной копии. Допустимые значения - 1 и 0 ( 1 - проверять, 0 - не проверять)
@dbretainunit - указывает единицы измерения следующего параметра @dbretainval. Может принимать значения
  • minutes, hours, days, weeks, months, copies
. У меня стоит copies.
@dbretainval - указывает период времени или количество старых архивных копий. В данном случае архивная копия лежит в указанной папке, пока не будет сделано ещё 10 бэкапов. Потом самая старая удаляется, и так по кругу. Как видите можно задать по вкусу.
@rptretainunit и @rptretainval тоже самое, но для логов.
@report - создавать ли отчёт о выполнении операции? (1 - да, 0 - нет)

Если у вас в настройке базы данных в recovery model стоит FULL (по умолчанию альта ставит SIMPLE), то нужно кроме базы сохранить и журналы логов. Для этого создаём файл full_log_backup.sql с таким-же содержанием, но только поставить параметр @optype = 'LOG'.

Теперь создаём файл full_db_backup.bat и в него прописываем

Код: Выделить всё

"C:\Program Files\Microsoft SQL Server\90\Tools\binn\SQLCMD.EXE" -i "D:\Backup\scripts_sql\full_db_backup.sql" 
Думаю тут всё ясно. Ещё можно указывать имя сервера (например у вас несколько экземпляров установлено на одном компе). Но это уже читайте хелп к sqlcmd.exe
Такой-же батник создаём для full_log_backup.sql
Теперь нужно лишь периодически запускать эти бат-файлы. Для этих целей можно воспользоваться планировщиком Windows. Я же установил бесплатную программу Cobian Backup. При создании операции резервного копирования там можно указать разнообразные события. Для меня лучшим оказалось EXECUTE AND WAIT. т.е. я выбрал резервное копирование папки D:\Backup\backups_sql но перед этим cobian backup по очереди вызовет и дождётся выполнения моих bat-файлов для бэкапа базы. Затем вся папка сжимается в архив 7z и копируется в папку с бэкапами на локальном компьютере и в сетевую папку на другом компьютере. Очень удобно. Поэтому несмотря на то, что после 10 раз старые резервные копии удаляются из папки backups_sql, они остаются у меня в архивах. На всякий случай. Надеюсь кому-нибудь это пригодится.
Следующие пользователи поблагодарили warner за это собщение: Lerich
Ответить