Циклический бэкап по дням недели.

Администрирование - Архивирование (backup)

26
В интернете часто можно встретить статьи о том, как написать скрипты для автоматического архивирования баз MSSQL. Методика, в них предлагаемая создает новый архив каждый новый день.
Более подробно об этом можно почитать в http://outcoldman.ru/ru/blog/show/127
   Я предлагаю незначительное усовершенствование скриптов и генерацию архивов по дням недели с циклической их перезаписью. Скрипт тоже не полностью мой, а скомпонован из различных примеров, найденных в интернете, но, надеюсь, именно представленный вариант будет полезен не только мне.

 

Циклический бэкап по дням недели.

 

В интернете часто можно встретить статьи о том, как написать скрипты для автоматического архивирования баз MSSQL. Методика, в них предлагаемая создает новый архив каждый новый день.

Более подробно об этом можно почитать в http://outcoldman.ru/ru/blog/show/127

   Я предлагаю незначительное усовершенствование скриптов и генерацию архивов по дням недели с циклической их перезаписью. Скрипт тоже не полностью мой, а скомпонован из различных примеров, найденных в интернете, но, надеюсь, именно представленный вариант будет полезен не только мне.

 

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

DECLARE @pathName NVARCHAR(512)

SET @pathName = 'D:\Backup\db_backup_' + Convert(varchar(8), GETDATE(), 112) + '.bak'

BACKUP DATABASE [MyDataBase] TO DISK = @pathName WITH NOFORMAT, INIT, NAME = N'db_backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10

 

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

@Echo Off

SetLocal EnableExtensions EnableDelayedExpansion

 

For /F "Tokens=1* Delims==" %%i In ('WMIC Path Win32_LocalTime Get /Value ^| Find "="') Do (

  Set V=%%j

  Set $%%i=!V:~0,-1!

)

If "%$DayOfWeek%"=="0" Set $DayOfWeek=7

 

For /F "Tokens=%$Month%" %%i In ("January February March April May June July August September October November December") Do Set $MonthName=%%i

For /F "Tokens=%$DayOfWeek%" %%i In ("Monday Tuesday Wednesday Thursday Friday Saturday Sunday") Do Set $DayOfWeekName=%%i

 

Echo --------------------------------------

Echo Day            : %$Day%

Echo Month          : %$MonthName% (%$Month%-й месяц года)

Echo Year           : %$Year%

Echo --------------------------------------

Echo DayOfWeek      : %$DayOfWeekName% (%$DayOfWeek%-й день недели)

Echo Quarter        : %$Quarter%

Echo --------------------------------------

Echo Hour           : %$Hour%

Echo Minute         : %$Minute%

Echo Second         : %$Second%

Echo --------------------------------------

 

sqlcmd -S SEVERNAME -U UserName -P Password -i schedule.sql

del D:\Backup\db_backup _%$DayOfWeekName%.rar

"C:\Program Files (x86)\WinRAR\Rar.exe" a -m2 D:\Backup\db_backup _%$DayOfWeekName%.rar D:\Backup\db_backup _*.bak

If "%$Day%"=="1" copy D:\Backup\db_backup _%$DayOfWeekName%.rar D:\Backup\db_backup _%$MonthName%.rar

del D:\Backup\db_backup _*.bak

 

Где меняем SERVERNAME – имя сервера, UserName – имя пользователя, Password – пароль пользователя, schedule.sql – имя сохраненного скрипта. Вторая и третья строка батника архивирует бекап в rar файл и удаляет сам файл бекапа. Для того чтобы работала архивация необходимо установить архиватор WinRAR и прописать полные пути до исполняемого файла Rar.exe. Дополнительно в этом варианте скрипта создается ежемесячный архив. Если он не нужен, уберите строчку: If "%$Day%"=="1" copy D:\Backup\db_backup _%$DayOfWeekName%.rar D:\Backup\db_backup _%$MonthName%.rar. Возможны другие варианты архивации (ежемесячная, ежеквартальная и т.д.) с помощью незначительной модификации скрипта,

 

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

 

 

26

Скачать файлы

Наименование Файл Версия Размер
Циклический бэкап по дням недели
.docx 15,55Kb
15.06.10
283
.docx 15,55Kb 283 Скачать

См. также