Запуск скрипта с необходимой периодичностью осуществляется на сервере баз данных с помощью "Назначенных заданий" Windows. Учетная запись, под которой запускается скрипт, должна обладать всеми необходимыми разрешениями для выполнения операции резервного копирования на сервере SQL, а также для записи файлов в указанные папки. Учетная запись, под которой запускается скрипт, должна обладать всеми необходимыми разрешениями для выполнения операции резервного копирования на сервере SQL, а также для записи файлов в указанные папки.
Для работы скрипта необходимы:
Скрипт запускается непосредственно на SQL Server'e, имя инстанции SQL Server указывается в переменной %SQLSERVER%. Код SQL запускается с помощью утилиты "SQL Query Tool", путь к утилите указывается в переменной %ISQL%, например "C:\Program Files\Microsoft SQL Server\80\Tools\Binn\OSQL.EXE".
Скрипт работает по следующей схеме:
@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=," %%i in (Bases.txt) do (
set Database=%%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=. " %%i in ('date /t') do set longdate=%%i%%j%%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