Автоматическое восстановление базы данных
Материал из wiki.standart-n.ru
Версия от 18:08, 22 апреля 2016; Aleksnick (обсуждение | вклад)
Установка
Сохраняем ниже следующий текст в файд service.bat и кладем в папку ServiceMngr на компьютере с базой:
@echo off SetLocal EnableExtensions EnableDelayedExpansion @chcp 866 SET ISC_USER=SYSDBA SET ISC_PASSWORD=masterkey set options=ServiceMngr.ini set gfix=null echo * echo * Определяем в какую директорию установлен Firebird if exist "c:\Program Files\Firebird\Firebird_2_5\firebird.conf" ( set gfix="c:\Program Files\Firebird\Firebird_2_5\bin\gfix" ) else ( if exist "c:\Program Files (x86)\Firebird\Firebird_2_5\firebird.conf" ( set gfix="c:\Program Files (x86)\Firebird\Firebird_2_5\bin\gfix" ) ) echo * %gfix% echo * timeout 10 echo * echo * Берем настройки подключения к базе данных for /f "eol=# delims== tokens=1,2" %%i in (%options%) do ( set %%i=%%j ) echo * %dbname% echo * rem Определяем путь к файлу For /F "Delims=: tokens=1,2,3" %%A In ('echo %dbname%') Do Set dbfile=%%~B:%%~C rem Определяем текущую дату For /F "Delims=. tokens=1,2,3" %%A In ('echo %date%') Do Set D=%%~A_%%~B_%%~C rem Определяем текущее времяsssss For /F "Delims=: tokens=1,2,3" %%A In ('echo %time%') Do Set T=%%~A_%%~B timeout 10 echo * if %gfix% Neq "null" ( echo * Перезапускаем Firebird echo * net stop "Firebird Guardian - DefaultInstance" net start "Firebird Guardian - DefaultInstance" timeout 10 echo * echo * Делаем shutdown базы echo * %gfix% %dbname% -shut -force 0 %gfix% %dbname% -shut -force 0 echo * timeout 10 echo * echo * Делаем проверку базы на ошибки echo * %gfix% -v -ignore %dbname% echo * For /F "Delims=" %%I In ('%gfix% -v -full %dbname%') Do Set V=%%~I Echo !V! echo * timeout 10 echo * If "!V!" Neq "" ( echo * В базе найдены ошибки echo * echo * Делаем файловую копию базы echo * copy "%dbfile%" "~orig_base_!D!_!T!.fdb" echo * copy "%dbfile%" "original_base_!D!_!T!.fdb" timeout 10 echo * echo * Делаем менд базы echo * %gfix% -mend %dbname% echo * For /F "Delims=" %%I In ('%gfix% -mend %dbname%') Do Set M=%%~I Echo !M! echo * timeout 10 echo * echo * Поднимаем базу echo * %gfix% %dbname% -online echo * %gfix% %dbname% -online timeout 10 echo * echo * Запускаем бэкап-ресторе через сервис-менеджер echo * start ServiceMngr.exe restore timeout 10 echo * ) else ( echo Ошибки в базе НЕ найдены echo * timeout 10 echo * echo * Поднимаем базу echo * %gfix% %dbname% -online echo * %gfix% %dbname% -online timeout 10 echo * ) ) else ( echo * Firebird не установлен echo * timeout 10 echo * )