Различия

Здесь показаны различия между выбранной ревизией и текущей версией данной страницы.

Ссылка на это сравнение

ru:technical_manual:app:script_example [2014/04/18 16:30]
127.0.0.1 внешнее изменение
— (текущий)
Строка 1: Строка 1:
-====== Пример скрипта создания резервных копий баз данных ====== 
- 
-Запуск скрипта с необходимой периодичностью осуществляется на сервере баз данных с помощью "Назначенных заданий" 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". 
- 
-Скрипт работает по следующей схеме: 
- 
-  - Создается резервная копия, имя файла при этом формируется следующим образом: "Имя_базы_ДД_ММ_ГГГГ.db". База сохраняется локально, путь к базе данных указывается в переменной %BACKUP%. Создаются лог-файлы резервного копирования для каждой базы в виде "log_autobackupsql_<Имя_базы>.txt" и общий лог-файл "backup_log.txt", путь к папке для хранения лог-файлов указывается в переменной %LOG%. \\ 
-  - Созданный файл запаковывается архиватором. Расположение архиватора указывается переменной %RAR%.\\ 
-  - Созданный архив копируется на два указанных сетевых источника хранения архивов: переменные %PATH01% и %PATH02%. Если путь не указан, копирование архива не производится. \\ 
-  - Архивы, созданные ранее определенного количества дней, удаляются. Утилита для удаления указывается в переменной %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 
- 
-   
-  
-  
-[<contextnavigator>]  
  
Актуальные новости, публикации и практики для бизнес-архитекторов и аналитиков
Driven by DokuWiki