Время прочтения: 4 мин.
В практике аудита использование СУБД SQL Server для хранения и анализа данных – одно из непременных условий, существенно повышающих качество проводимой работы.
А обслуживание базы данных, включающее, в том числе, резервное копирование данных, крайне важно для обеспечения ее бесперебойной работы.
В этой статье я поделюсь альтернативным способом того, как мы автоматизировали создание ежедневной резервной копии базы данных для обеспечения возможности восстановления данных в случае какого-либо инцидента. Мы сделали это с помощью служебной программы SQLCMD без запуска SQL Server Management Studio.
Но для начала немного простых примеров использования sqlcmd (все данные тестовые).
Посмотрим, как это работает в интерактивном режиме.
Запускаем командную строку Windows – cmd.
Чтобы подключиться к именованному экземпляру SQL Server, укажем имя сервера и имя экземпляра SQL Server (в примере соответственно DESKTOP\SQLEXPRESS), с которым необходимо соединиться.
sqlcmd -S DESKTOP\SQLEXPRESS –E
где:
–S указывает на server\instance_name;
–E –trusted connection (доверительное соединение).
Отображаемая в командной строке цифра 1> означает, что подключение состоялось и есть готовность принимать запросы для исполнения.
Если ранее при создании пользователя SQL Server для пользователя была включена аутентификацию SQL Server,
то при подключении требуется указать имя пользователя и ввести его пароль.
Чтобы это выполнить, предварительно необходимо выйти из sqlcmd и заново войти с указанием учетных данных:
sqlcmd -S DESKTOP\SQLEXPRESS –U DB_User
Командная строка запросит пароль для пользователя DB_User, который необходимо ввести с клавиатуры.
При желании можно указать пароль в командной строке, хотя это не рекомендуется по соображениям безопасности:
sqlcmd -S DESKTOP\SQLEXPRESS –U DB_User –P 12345678
Давайте теперь проверим текущую базу данных.
При создании входа в SQL Server можно определить базу данных, в которую необходимо войти, по умолчанию. Если она не указана, то базой данных по умолчанию будет является основная база данных (master).
select db_name()
go
Следующий пример использования sqlcmd – вывод списка баз данных в экземпляре SQL:
select name from sys.databases
go
Теперь давайте посмотрим на запуск sqlcmd в командном режиме.
Получим список таблиц в базе данных db1, выведя его в файл tables.txt, используя в sqlcmd подготовленный заранее и сохраненный на жестком диске ПК, сценарий tablesList.sql со следующим содержанием:
select table_name from db1.information_schema.tables;
Затем вызовем sqlcmd для выполнения созданного сценария tablesList.sql:
sqlcmd -S DESKTOP\SQLEXPRESS -E -iC:\Users\User\SQL\Scripts\tablesList.sql -oC:\Users\User\SQL\tables.txt
где:
—i используется для указания ввода, указывается файл сценария, в примере это сохраненный tablesList.sql;
—o используется для отображения результатов вывода в файл, в примере это tables.txt
В tables.txt отображается следующий результат (для примера выбрана тестовая база данных, состоящая из одной таблицы):
Теперь вернемся к нашей задаче автоматизации резервного копирования с использованием sqlcmd и планировщика задач Windows.
Во-первых, создадим файл сценария резервного копирования базы данных db1 и сохраним его в файле backup.sql:
declare @Backup nvarchar(400)
set @Backup=concat('C:\Users\User\SQL\Backup\db1-',(format(getdate(),'yyyy-MM-dd-hh-mm-ss-tt')),'.bak')
backup database [db1] to disk=@Backup
with noformat, noinit, name = n'db1-Backup', skip, norewind, nounload, stats=10
go
Файл резервной копии в результате выполнения этого сценария сохраняется в каталог C:\Users\User\SQL\Backup\.
Далее создаем командный файл run-sqlcmd-backup.bat следующего содержания:
@Echo off
sqlcmd -S DESKTOP\SQLEXPRESS -E -iC:\Users\User\SQL\Scripts\backup.sql
И, наконец, открываем Планировщик заданий Windows (подробнее о планировщике заданий Windows можно прочесть в официальных документах Microsoft по этой тематике), для того, чтобы создать задачу резервного копирования базы данных db1, запускающую командный файл run-sqlcmd-backup.bat по необходимому расписанию.
В итоге с помощью sqlcmd мы получили регулярное резервное копирование выбранной нами базы данных.