Автоматическое восстановление базы данных — различия между версиями
Материал из wiki.standart-n.ru
Aleksnick (обсуждение | вклад) |
Aleksnick (обсуждение | вклад) |
||
| Строка 39: | Строка 39: | ||
echo * %gfix% | echo * %gfix% | ||
| − | |||
| − | |||
| − | |||
echo * | echo * | ||
| Строка 59: | Строка 56: | ||
set dbname="%dbname%" | set dbname="%dbname%" | ||
echo * %dbname% | echo * %dbname% | ||
| − | |||
| − | |||
| − | |||
echo * | echo * | ||
| Строка 68: | Строка 62: | ||
echo * Перезапускаем Firebird | echo * Перезапускаем Firebird | ||
echo * | echo * | ||
| + | net stop "Firebird Server - DefaultInstance" | ||
| + | net start "Firebird Server - DefaultInstance" | ||
net stop "Firebird Guardian - DefaultInstance" | net stop "Firebird Guardian - DefaultInstance" | ||
net start "Firebird Guardian - DefaultInstance" | net start "Firebird Guardian - DefaultInstance" | ||
| Строка 76: | Строка 72: | ||
%gfix% -shut -force 0 %dbname% | %gfix% -shut -force 0 %dbname% | ||
echo * | echo * | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
echo * Делаем проверку базы на ошибки | echo * Делаем проверку базы на ошибки | ||
echo * | echo * | ||
| − | %gfix% -v -full %dbname% >valid.log | + | %gfix% -v -full -ignore %dbname% >valid.log |
For /F "usebackq tokens=* delims=" %%i In ("valid.log") Do Set V=%%i | For /F "usebackq tokens=* delims=" %%i In ("valid.log") Do Set V=%%i | ||
Echo !V! | Echo !V! | ||
| − | |||
| − | |||
| − | |||
echo * | echo * | ||
| Строка 102: | Строка 90: | ||
echo * | echo * | ||
copy "%dbfile%" original_base_!D!_!T!.fdb | copy "%dbfile%" original_base_!D!_!T!.fdb | ||
| − | |||
| − | |||
| − | |||
echo * Делаем менд базы | echo * Делаем менд базы | ||
| Строка 114: | Строка 99: | ||
Echo !M! | Echo !M! | ||
echo * | echo * | ||
| − | |||
| − | |||
| − | |||
echo * Поднимаем базу | echo * Поднимаем базу | ||
echo * | echo * | ||
%gfix% -online %dbname% | %gfix% -online %dbname% | ||
| − | |||
| − | |||
| − | |||
echo * Запускаем бэкап-ресторе через сервис-менеджер | echo * Запускаем бэкап-ресторе через сервис-менеджер | ||
| Строка 136: | Строка 115: | ||
echo Ошибки в базе НЕ найдены | echo Ошибки в базе НЕ найдены | ||
echo * | echo * | ||
| − | |||
| − | |||
| − | |||
echo * Поднимаем базу | echo * Поднимаем базу | ||
| Строка 157: | Строка 133: | ||
echo * | echo * | ||
| − | ) | + | ) |
</pre> | </pre> | ||
Версия 16:09, 28 апреля 2016
Алгоритм работы скрипта
- Берет настройки подключения из файла ServiceMngr.ini
- Перезапускает Firebird
- Делает shutdown базы
- Делает проверку базы на ошибки
- Если в базе найдены ошибки
- Делает файловую копию базы
- Делает mend базы
- Поднимает базу
- Запускает сжатие/восстановление спомощью сервис-менеджера
- Если ошибок нет
- Поднимает базу обратно
Установка
Сохраняем ниже следующий текст в файл service.bat, ставим кодировку 866 и кладем на компьютере с базой в папку 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\bin\gfix.exe" (
set gfix="c:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe"
) else (
if exist "c:\Program Files (x86)\Firebird\Firebird_2_5\bin\gfix.exe" (
set gfix="c:\Program Files (x86)\Firebird\Firebird_2_5\bin\gfix.exe"
)
)
echo * %gfix%
echo *
echo * Берем настройки подключения к базе данных
for /f "eol=# delims== tokens=1,2" %%i in (%options%) do (
set %%i=%%j
)
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
set dbname="%dbname%"
echo * %dbname%
echo *
if %gfix% Neq "null" (
echo * Перезапускаем Firebird
echo *
net stop "Firebird Server - DefaultInstance"
net start "Firebird Server - DefaultInstance"
net stop "Firebird Guardian - DefaultInstance"
net start "Firebird Guardian - DefaultInstance"
echo *
echo * Делаем shutdown базы
%gfix% -shut -force 0 %dbname%
echo *
echo * Делаем проверку базы на ошибки
echo *
%gfix% -v -full -ignore %dbname% >valid.log
For /F "usebackq tokens=* delims=" %%i In ("valid.log") Do Set V=%%i
Echo !V!
echo *
If "!V!" Neq "" (
echo * В базе найдены ошибки
echo *
echo * Делаем файловую копию базы
echo *
copy "%dbfile%" original_base_!D!_!T!.fdb
echo * Делаем менд базы
echo *
%gfix% -mend %dbname% >mend.log
For /F "usebackq tokens=* delims=" %%i In ("mend.log") Do Set M=%%i
Echo !M!
echo *
echo * Поднимаем базу
echo *
%gfix% -online %dbname%
echo * Запускаем бэкап-ресторе через сервис-менеджер
echo *
start ServiceMngr.exe restore
timeout 10
echo *
) else (
echo Ошибки в базе НЕ найдены
echo *
echo * Поднимаем базу
echo *
%gfix% -online %dbname%
timeout 10
echo *
)
) else (
echo * Firebird не установлен
echo *
timeout 10
echo *
)