Различия

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

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

ru:technical_manual:app:script_example [2023/03/16 12:20] (текущий)
Строка 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>]
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +{(rater>id=ru_technical_manual_app_script_example|name=Пример скрипта создания резервных копий баз данных|type=vote|trace=ip|headline=off)}
Driven by DokuWiki