Автоматическое восстановление базы данных
Материал из wiki.standart-n.ru
Версия от 18:20, 22 апреля 2016; Aleksnick (обсуждение | вклад)
Алгоритм работы скрипта
- Берет настройки подключения из файла ServiceMngr.ini
- Перезапускает Firebird
- Делает shutdown базы
- Делает проверку базы на ошибки
- Если в базе найдены ошибки
- Делает файловую копию базы
- Делает mend базы
- Поднимает базу
- Запускает сжатие/восстановление спомощью сервис-менеджера
- Если ошибок нет
- Поднимает базу обратно
Установка
Сохраняем ниже следующий текст в файл 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 Определяем текущее время
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 *
)