Облачное хранилище

Создание бэкапов по расписанию в MS SQL Express

MS SQL Express лишен агента, при помощи которого можно выполнять задачи по расписанию, но можно воспользоваться и стандартными средствами Windows.

Очень часто для небольших проектов хватает и Express версии SQL сервера. Одна из проблем –это то, что у Express версии нет SQL Agent службы, при помощи которой можно делать некоторые задачи по расписанию. Взамен можно использовать SQLCMD и стандартный Scheduled Tasks от Windows. Первое, что нужно сделать, это написать скрипт, который создавал бы для нас необходимые бекапы. Для его генерации можно воспользоваться MS Management Studio (ее тоже можно скачать для Express версии) и на окне создания бекапа нажать не OK, а “Script Actions to …”.

Я же использую обычно в таких задачах следующий скрипт:

<code style="color: #f8f8f2;">DECLARE @pathName NVARCHAR(512) 
SET @pathName = 'D:Backupdb_backup_' + Convert(varchar(8), GETDATE(), 112) + '.bak' 
BACKUP DATABASE [MyDataBase] TO  DISK = @pathName WITH NOFORMAT, NOINIT,  NAME = N'db_backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10</code>

Этот скрипт создает бекап с именем файла db_backup_YYYYDDMM.bak гдеYYYYDDMM – это текущая дата.  Дата в имени файла позволит нам создавать каждый день бекап в новом файле. Запустите и проверьте что бекап действительно создается такой какой вам и нужен. Этот скрипт сохраняем в какой-нибудь папке под именем schedule.sql, предположим c:sheduled tasks. В этой же папке создадим исполняемый файл backup.bat, следующего содержания:

<span style="color: #800000;"><code style="color: #f8f8f2;">sqlcmd -S SEVERNAME -U UserName -P Password -i schedule.sql
7z a -tzip D:Backup db_backup_%date%.zip -i! D:Backupdb_backup_*.bak
del d:Backupdb_backup_*.bak</code></span>

Где меняем SERVERNAME – имя сервера, UserName – имя пользователя, Password – пароль пользователя, schedule.sql – имя сохраненного скрипта. Вторая и третья строка батника архивирует бекап в zip файл и удаляет сам файл бекапа. Для того чтобы работала архивация необходимо установить архиватор 7z и прописать полные пути до исполняемого файла 7z.exe либо положить 7z.exe и 7z.dll в ту же папку, где располагаются скрипты. Теперь можем запустить исполняемый файл backup.bat и проверить проработает ли он так как нужно. Последний шаг это записать schedule в задачи windows. Запускаем Task Scheduler из меню Пуск, либо набираем в командной строке taskschd.msc. В разных версиях Windows это выглядит по разному, да и информацию о том как сделать задачу можно прочитать в помощи Windows. Основное – это запускать задачу от имени пользователя с достаточными правами на используемые папки. При помощи таких действий можно так же запрограммировать и любые другие задачи. В скрипте schedule.sql можно перед бекапом вызвать какие-либо необходимые процедуры, может переиндексирование или сжатие базы данных.