Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.
ru:technical_manual:app:script_example [2012/06/25 14:46] admin создано |
— (текущий) | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ===== 4.6 Пример скрипта создания резервных копий баз данных ===== | ||
- | Запуск скрипта с необходимой периодичностью осуществляется на сервере баз данных с помощью «Назначенных заданий» Windows. Учетная запись, под которой запускается скрипт, должна обладать всеми необходимыми разрешениями для выполнения операции резервного копирования на сервере SQL, а также для записи файлов в указанные папки. Учетная запись, под которой запускается скрипт, должна обладать всеми необходимыми разрешениями для выполнения операции резервного копирования на сервере SQL, а также для записи файлов в указанные папки. | ||
- | |||
- | Для работы скрипта необходимы: | ||
- | |||
- | · архиватор, в примере используется «WinRar»; | ||
- | |||
- | · утилита для удаления файлов, в примере используется «Forfiles.exe» из Windows Resource Kit; | ||
- | |||
- | · файл «Bases.txt» со списком имен баз данных. Имя каждой базы записывается с новой строки. | ||
- | |||
- | Скрипт запускается непосредственно на SQL Server'e, имя инстанции SQL Server указывается в переменной %SQLSERVER%. Код SQL запускается с помощью утилиты «SQL Query Tool», путь к утилите указывается в переменной %ISQL%, например «C:\Program Files\Microsoft SQL Server\80\Tools\Binn\OSQL.EXE». | ||
- | |||
- | Скрипт работает по следующей схеме: | ||
- | |||
- | 5. Создается резервная копия, имя файла при этом формируется следующим образом: «Имя_базы_ДД_ММ_ГГГГ.db». База сохраняется локально, путь к базе данных указывается в переменной %BACKUP%. Создаются лог-файлы резервного копирования для каждой базы в виде «log_autobackupsql_<Имя_базы>.txt» и общий лог-файл «backup_log.txt», путь к папке для хранения лог-файлов указывается в переменной %LOG%. | ||
- | |||
- | 6. Созданный файл запаковывается архиватором. Расположение архиватора указывается переменной %RAR%. | ||
- | |||
- | 7. Созданный архив копируется на два указанных сетевых источника хранения архивов: переменные %PATH01% и %PATH02%. Если путь не указан, копирование архива не производится. | ||
- | |||
- | 8. Архивы, созданные ранее определенного количества дней, удаляются. Утилита для удаления указывается в переменной %FORFILES%. Количество дней указывается в переменной %DAYS%. | ||
- | |||
- | === Пример === | ||
- | |||
- | @echo off | ||
- | |||
- | set SQLSERVER=<Имя_инстанции_SQL_Server> | ||
- | |||
- | set ISQL=<Имя_OSQL> | ||
- | |||
- | set BACKUP=<Путь_к_локальному_каталогу_резервных_копий> | ||
- | |||
- | set LOG=<Путь_к_папке_лог_файлов> | ||
- | |||
- | set RAR=%CD%\Rar.exe | ||
- | |||
- | set FORFILES=%CD%\Forfiles.exe | ||
- | |||
- | set DAYS=<Количество_дней> | ||
- | |||
- | Set PATH01=<Путь_сетевого_ресурса_1> | ||
- | |||
- | Set PATH02=<Путь_сетевого_ресурса_2> | ||
- | |||
- | |||
- | |||
- | remДиректория в которой будет создан SQL скрипт | ||
- | |||
- | set temp=%cd% | ||
- | |||
- | remСчитывание названий баз из файла Bases.txt | ||
- | |||
- | for /F "eol=; tokens=1 delims=," <nowiki>%%</nowiki>i in (Bases.txt) do ( | ||
- | |||
- | set Database=<nowiki>%%</nowiki>i | ||
- | |||
- | call :BackUp) | ||
- | |||
- | goto :EOF | ||
- | |||
- | |||
- | |||
- | :BackUp | ||
- | |||
- | rem Проверки | ||
- | |||
- | IF NOT EXIST "%ISQL%" (echo Microsoft SQL Server Command Line Tool "%ISQL%" не найден! | ||
- | |||
- | echoПоправьте значение переменной ISQL в командном файле! | ||
- | |||
- | goto :EOF) | ||
- | |||
- | IF NOT EXIST "%RAR%" (echo Архиватор "%RAR%" не найден! | ||
- | |||
- | echoПоправьте значение переменной RAR в командном файле! | ||
- | |||
- | goto :EOF) | ||
- | |||
- | IF NOT EXIST "%FORFILES%" (echo Утилита "%FORFILES%" не найдена! | ||
- | |||
- | echoПоправьте значение переменной FORFILES в командном файле! | ||
- | |||
- | goto :EOF) | ||
- | |||
- | IF NOT EXIST "%BACKUP%" (echo Каталог бэкапов "%BACKUP%" не найден! | ||
- | |||
- | echoПоправьте значение переменной BACKUP в командном файле! | ||
- | |||
- | goto :EOF) | ||
- | |||
- | if NOT '%PATH01%'==%%''%% (IF NOT EXIST "%PATH01%" (echo Каталог бэкапов "%PATH01%" не найден! | ||
- | |||
- | echo Поправьте значение переменной PATH01 в командном файле! | ||
- | |||
- | echo %date% %time% Поправьте значение переменной PATH01 в командном файле! >> %LOG%\backup_log.txt | ||
- | |||
- | set PATH01=) | ||
- | |||
- | ) | ||
- | |||
- | if NOT '%PATH02%'==%%''%% (IF NOT EXIST "%PATH02%" (echo Каталог бэкапов "%PATH02%" не найден! | ||
- | |||
- | echo Поправьте значение переменной PATH02 в командном файле! | ||
- | |||
- | echo %date% %time% Поправьте значение переменной PATH02 в командном файле! >> %LOG%\backup_log.txt | ||
- | |||
- | set PATH02=) | ||
- | |||
- | ) | ||
- | |||
- | |||
- | |||
- | for /f "tokens=1-4 delims=. " <nowiki>%%</nowiki>i in %%('%%date /t') do set longdate=<nowiki>%%</nowiki>i<nowiki>%%</nowiki>j<nowiki>%%</nowiki>k | ||
- | |||
- | |||
- | |||
- | set FileName=%longdate:~0,2%_%longdate:~2,2%_%longdate:~4,4% | ||
- | |||
- | rem дата в формате 2003_04_12 | ||
- | |||
- | echoДата: %FileName% | ||
- | |||
- | echo SQL Server: %SQLServer% | ||
- | |||
- | echo База данных: %Database% | ||
- | |||
- | echo. | ||
- | |||
- | |||
- | |||
- | echo 1. Создание резервной копии... | ||
- | |||
- | set ArcSQL=%temp%\arcsrv.sql | ||
- | |||
- | echo USE master > %ArcSQL% | ||
- | |||
- | echo EXEC sp_addumpdevice 'disk', '%Database%_Backup', '%BACKUP%\%Database%_%FileName%.db' >> %ArcSQL% | ||
- | |||
- | echo BACKUP DATABASE %DataBase% TO %Database%_Backup >> %ArcSQL% | ||
- | |||
- | echo exec sp_dropdevice '%Database%_Backup' >> %ArcSQL% | ||
- | |||
- | "%ISQL%" -E -S %SQLServer% -d master -i %ArcSQL% -n -o %log%\log_autobackupsql_%Database%.txt | ||
- | |||
- | echo. | ||
- | |||
- | |||
- | |||
- | echo 2. Архивирование резервной копии... | ||
- | |||
- | cd "%BACKUP%" | ||
- | |||
- | "%RAR%" a "%BACKUP%\%Database%_%FileName%" "%BACKUP%\*%FileName%.db" -rr -c -ep -av -idp -id -idc | ||
- | |||
- | echo. | ||
- | |||
- | |||
- | |||
- | echo 3. Копирование резервных копий в сети... | ||
- | |||
- | if not '%PATH01%'==%%''%% Call :CopyProc "%PATH01%" | ||
- | |||
- | if not '%PATH02%'==%%''%% Call :CopyProc "%PATH02%" | ||
- | |||
- | echo. | ||
- | |||
- | |||
- | |||
- | echo 4. Лог результата копирования | ||
- | |||
- | set i=0 | ||
- | |||
- | IF EXIST "%BACKUP%\%Database%_%FileName%.rar" (set /a i=%i%+1) | ||
- | |||
- | IF EXIST "%PATH01%\%Database%_%FileName%.rar" (set /a i=%i%+1) | ||
- | |||
- | IF EXIST "%PATH02%\%Database%_%FileName%.rar" (set /a i=%i%+1) | ||
- | |||
- | echo %Date% %time% - Backup %Database% завершен! Готово архивов: %i% из 3 >> %log%\backup_log.txt | ||
- | |||
- | echo. | ||
- | |||
- | |||
- | |||
- | echo Резервное копирование завершено | ||
- | |||
- | |||
- | |||
- | if /i %i% NEQ 0 (Call :Delete) | ||
- | |||
- | goto :EOF | ||
- | |||
- | |||
- | |||
- | :Delete | ||
- | |||
- | echo Удаление… | ||
- | |||
- | "%forfiles%" -p"%Backup%" -s -m*.rar -d-%DAYS% -c"CMD /C del @PATH\@FILE" | ||
- | |||
- | if not '%PATH01%'==%%''%% ("%forfiles%" -p"%PATH01%" -s -m*.rar -d-90 -c"CMD /C del @PATH\@FILE") | ||
- | |||
- | if not '%PATH02%'==%%''%% ("%forfiles%" -p"%PATH02%" -s -m*.rar -d-90 -c"CMD /C del @PATH\@FILE") | ||
- | |||
- | del"%BACKUP%\*.db" | ||
- | |||
- | goto :EOF | ||
- | |||
- | |||
- | |||
- | :CopyProc | ||
- | |||
- | echo Копирование... %1 | ||
- | |||
- | copy "%BACKUP%\%Database%_%FileName%.rar" %1 | ||
- | |||
- | goto :EOF | ||
- | |||
- | |||
- | |||
- | :EOF | ||
- | |||
- |