Автоматическое восстановление базы данных — различия между версиями
Материал из wiki.standart-n.ru
Aleksnick (обсуждение | вклад) |
Aleksnick (обсуждение | вклад) |
||
Строка 30: | Строка 30: | ||
echo * Определяем в какую директорию установлен Firebird | echo * Определяем в какую директорию установлен Firebird | ||
− | if exist "c:\Program Files\Firebird\Firebird_2_5\ | + | if exist "c:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" ( |
set gfix="c:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" | set gfix="c:\Program Files\Firebird\Firebird_2_5\bin\gfix.exe" | ||
) else ( | ) else ( | ||
− | if exist "c:\Program Files (x86)\Firebird\Firebird_2_5\ | + | 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" | set gfix="c:\Program Files (x86)\Firebird\Firebird_2_5\bin\gfix.exe" | ||
) | ) | ||
Строка 48: | Строка 48: | ||
set %%i=%%j | set %%i=%%j | ||
) | ) | ||
− | |||
− | |||
− | |||
rem Определяем путь к файлу | rem Определяем путь к файлу | ||
For /F "Delims=: tokens=1,2,3" %%A In ("echo %dbname%") Do Set dbfile=%%~B:%%~C | For /F "Delims=: tokens=1,2,3" %%A In ("echo %dbname%") Do Set dbfile=%%~B:%%~C | ||
Строка 59: | Строка 56: | ||
rem Определяем текущее время | rem Определяем текущее время | ||
For /F "Delims=: tokens=1,2,3" %%A In ('echo %time%') Do Set T=%%~A_%%~B | For /F "Delims=: tokens=1,2,3" %%A In ('echo %time%') Do Set T=%%~A_%%~B | ||
+ | |||
+ | set dbname="%dbname%" | ||
+ | echo * %dbname% | ||
+ | echo * | ||
timeout 10 | timeout 10 | ||
Строка 73: | Строка 74: | ||
echo * Делаем shutdown базы | echo * Делаем shutdown базы | ||
− | %gfix% -shut -force 0 | + | %gfix% -shut -force 0 %dbname% |
echo * | echo * | ||
timeout 10 | timeout 10 | ||
echo * | echo * | ||
+ | |||
+ | |||
echo * Делаем проверку базы на ошибки | echo * Делаем проверку базы на ошибки | ||
echo * | echo * | ||
− | + | %gfix% -v -full %dbname% >valid.log | |
− | For /F " | + | |
+ | For /F "usebackq tokens=* delims=" %%i In ("valid.log") Do Set V=%%i | ||
+ | |||
Echo !V! | Echo !V! | ||
echo * | echo * | ||
Строка 96: | Строка 101: | ||
echo * Делаем файловую копию базы | echo * Делаем файловую копию базы | ||
echo * | echo * | ||
− | copy "%dbfile% | + | copy "%dbfile%" original_base_!D!_!T!.fdb |
timeout 10 | timeout 10 | ||
Строка 103: | Строка 108: | ||
echo * Делаем менд базы | echo * Делаем менд базы | ||
echo * | echo * | ||
− | + | %gfix% -mend %dbname% >mend.log | |
− | For /F " | + | |
+ | For /F "usebackq tokens=* delims=" %%i In ("mend.log") Do Set M=%%i | ||
+ | |||
Echo !M! | Echo !M! | ||
echo * | echo * | ||
Строка 113: | Строка 120: | ||
echo * Поднимаем базу | echo * Поднимаем базу | ||
echo * | echo * | ||
− | %gfix% -online | + | %gfix% -online %dbname% |
timeout 10 | timeout 10 | ||
Строка 135: | Строка 142: | ||
echo * Поднимаем базу | echo * Поднимаем базу | ||
echo * | echo * | ||
− | %gfix% -online | + | %gfix% -online %dbname% |
timeout 10 | timeout 10 |
Версия 19:44, 27 апреля 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 * timeout 10 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 * timeout 10 echo * if %gfix% Neq "null" ( echo * Перезапускаем Firebird echo * net stop "Firebird Guardian - DefaultInstance" net start "Firebird Guardian - DefaultInstance" echo * echo * Делаем shutdown базы %gfix% -shut -force 0 %dbname% echo * timeout 10 echo * echo * Делаем проверку базы на ошибки echo * %gfix% -v -full %dbname% >valid.log For /F "usebackq tokens=* delims=" %%i In ("valid.log") Do Set V=%%i Echo !V! echo * timeout 10 echo * If "!V!" Neq "" ( echo * В базе найдены ошибки echo * echo * Делаем файловую копию базы echo * copy "%dbfile%" original_base_!D!_!T!.fdb timeout 10 echo * echo * Делаем менд базы echo * %gfix% -mend %dbname% >mend.log For /F "usebackq tokens=* delims=" %%i In ("mend.log") Do Set M=%%i Echo !M! echo * timeout 10 echo * echo * Поднимаем базу echo * %gfix% -online %dbname% timeout 10 echo * echo * Запускаем бэкап-ресторе через сервис-менеджер echo * start ServiceMngr.exe restore timeout 10 echo * ) else ( echo Ошибки в базе НЕ найдены echo * timeout 10 echo * echo * Поднимаем базу echo * %gfix% -online %dbname% timeout 10 echo * ) ) else ( echo * Firebird не установлен echo * timeout 10 echo * )