Бэкап баз MS SQL с помощью APBackup

Сегодня мы рассмотрим примеры автоматизации бэкапа базы MS SQL с помощью APBackup.

При выполнении задания в APBackup есть возможность запускать внешние приложения до архивации и после. Кроме того, можно настроить задание, что бы вообще не выполнять архивацию а запускать только внешние программы (т.е. получим обычный старт приложения по расписанию). Это можно сделать, если установить опцию «Только запуск внешних приложений, без архивации».

Рассмотрим для примера задание с архивацией.

Нам необходимо настроить задание что бы перед архивацией создался стандартный бэкап одной базы MS SQL в некоторой темповой директории и затем этот файл необходимо заархивировать и поместить в наше хранилище резервных копий.

Для этого создадим директорию для временных файлов, например C:\SQLTMPBackup, она будет служить ИСТОЧНИКОМ для нашего задания. Кроме того, после архивации будем удалять временные бэкапы. Для этого установим опцию «Удалять файлы источника после архивации»:
Удаление файлов источника после архивации

Сохранение архива настраивается стандартным образом с применением формата даты и глубины, например. Можно для надежного хранения резервных копий настроить так же и дополнительные директории, например на другом сервере по сети или/и на закладке «Сохранение на FTP» настроить копирование так же на удаленный FTP сервер.

Возможно так же применять внешний архиватор или просто копировать файл источника без архивации, а так же копирование сразу на FTP без архивации. Это стандартные возможности APBackup и мы здесь не будем останавливаться на них подробно.
Теперь подробно разберемся, как же все таки осуществить бекап базы MS SQL с помощью внешнего приложения. Здесь нам поможет утилита, входящая в стандартную установку MS SQL — OSQL.EXE

Например, создание бэкапа базы msdb будет выглядеть так:
osql.exe -S<Имя сервера> -U<Имя пользователя> -P<Пароль> -Q "BACKUP DATABASE msdb TO DISK = 'c:\msdb_data.bak' with skip,init"

Т.е. здесь за переключателем -Q идет команда Transact-SQL, которую надо выполнить. В данном случае это BACKUP DATABASE так же полезно выполнить команду BACKUP LOG например для усечения лог файла.

ВНИМАНИЕ: Если сервер расположен не на вашей машине то c:\msdb_data.bak вы не обнаружите у себя. Т.к. это путь куда сервер будет сохранять данные, т.е. этот файл будет располагаться на сервере на диске C:\. В принципе APBackup может забрать файл и с сервера, если сделать общую папку на сервере, или же MS SQL сервер может сохранить файл бэкапа на другой сервер, но для этого сервис MS SQL должен быть загружен с доменной учетной записью, а не localSystem (как по умолчанию).

Если физически вы запускаете OSQL там же, где установлен сервер, то -S можно не включать в командную строку, по умолчанию OSQL соединяется с локальным сервером.
Если на сервер используется Windows Trusted Authentication и у вашего доменного имени есть права на MSSQL на бэкап базы, то можно использовать следующий вызов:

osql.exe -S<Имя сервера> -E -Q "BACKUP DATABASE msdb TO DISK = 'c:\msdb_data.bak' with skip,init"

Или без указания сервера если это локальный сервер:

osql.exe -E -Q "BACKUP DATABASE msdb TO DISK = 'c:\msdb_data.bak' with skip,init"

Переключатель -E означает использование Trusted connection т.е. под вашим доменным именем вместо явного указания: -U<Имя пользователя> -P<Пароль>

Если вам необходимо сделать бэкап сразу нескольких баз, просто создаем файл скрипт (у себя на машине), например, C:\mybackup.sql:

BACKUP DATABASE msdb TO DISK = 'c:\msdb_data.bak' with skip,init;
BACKUP DATABASE master TO DISK = 'c:\master_data.bak' with skip,init;
go

и выполняем команду:
osql.exe -S<Имя сервера> -E -i "C:\mybackup.sql"
Или
osql.exe -S<Имя сервера> -U<Имя пользователя> -P<Пароль> -i "C:\mybackup.sql"

Например
osql.exe -SSQLSERVER -Usa -P1111 -i "C:\mybackup.sql"
(Не делайте таких паролей для sa :))

Таким образом, мы сможем одним заданием в APBackup сделать бэкап сразу всех баз на MS SQL сервере. Получим в темповой директории, например 2 файла с бэкапами один файл — одна база.

Вот как выглядит пример настройки запуска создания архива базы MS SQL в APBackup

Запуск OSQL из APBackup

Здесь так же возможно отрегулировать параметры:

«Запустить в окне» если это HIDE то консольное окно в котором запуститься osql.exe будет не видимо. При SHOWNORMAL вы увидите консольное окно при запуске.

«Ждать завершения не более» — Если 0 то APBackup будет ждать бесконечно пока приложение не выполниться. Можно, например, поставить 60 минут. Если в течении 60 минут приложение не закроется APBackup перестанет ждать и продолжит выполнение задания. И если в директории источнике не обнаружиться файлов произойдет ошибка выполнения задания.

P.S. В документации к MS SQL 2008 рекомендуется использовать вместо osql новую утилиту sqlcmd т.к. osql будет исключена из будущих версий MS SQL. Новая утили имеет похожие ключи и позволяет таким же образом сделать резервную копию базы данных.

Ссылки по теме:
How to: Create a Full Database Backup (Transact-SQL)
BACKUP (Transact-SQL)
Синтаксис утилиты osql
MSSQL: Программа sqlcmd