Автоматическое восстановление базы данных — различия между версиями

Материал из wiki.standart-n.ru
Перейти к: навигация, поиск
Строка 1: Строка 1:
 
==Алгоритм работы скрипта==
 
==Алгоритм работы скрипта==
 
* Берет настройки подключения из файла '''ServiceMngr.ini'''
 
* Берет настройки подключения из файла '''ServiceMngr.ini'''
* Перезапускает Firebird
+
* Останавливаем Firebird
 +
* Переименовывает базу
 +
* Делает файловую копию базы
 
* Делает shutdown базы
 
* Делает shutdown базы
* Делает проверку базы на ошибки
+
* Делает mend базы
* Если в базе найдены ошибки
+
* Поднимает базу
** Делает файловую копию базы
+
* Запускает сжатие/восстановление спомощью сервис-менеджера
** Делает mend базы
+
** Поднимает базу
+
** Запускает сжатие/восстановление спомощью сервис-менеджера
+
* Если ошибок нет
+
** Поднимает базу обратно
+
  
  
 
==Установка==
 
==Установка==
Сохраняем ниже следующий текст в файл '''service.bat''', ставим кодировку '''866''' и кладем на компьютере с базой в папку '''ServiceMngr''', которая настроена на нужную базу. Затем запускаем.
+
Берем файл '''service.bat''' из директории '''\\SUPA\zclientxp\_releases\mendBackupRestore\''' и кладем клиенту на компьютер с базой в папку '''ServiceMngr''', которая настроена на нужную базу. Затем запускаем.
<pre>
+
@echo off
+
SetLocal EnableExtensions EnableDelayedExpansion
+
  
@chcp 866
 
  
SET ISC_USER=SYSDBA
+
==Проверка==
SET ISC_PASSWORD=masterkey
+
В директории '''\\SUPA\zclientxp\_releases\mendBackupRestore\''' есть база '''ztrade_fall.fdb''', в которой есть ошибки. Можно попробовать на ней.
 
+
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 *
+
 
+
)
+
 
+
</pre>
+

Версия 18:22, 28 апреля 2016

Алгоритм работы скрипта

  • Берет настройки подключения из файла ServiceMngr.ini
  • Останавливаем Firebird
  • Переименовывает базу
  • Делает файловую копию базы
  • Делает shutdown базы
  • Делает mend базы
  • Поднимает базу
  • Запускает сжатие/восстановление спомощью сервис-менеджера


Установка

Берем файл service.bat из директории \\SUPA\zclientxp\_releases\mendBackupRestore\ и кладем клиенту на компьютер с базой в папку ServiceMngr, которая настроена на нужную базу. Затем запускаем.


Проверка

В директории \\SUPA\zclientxp\_releases\mendBackupRestore\ есть база ztrade_fall.fdb, в которой есть ошибки. Можно попробовать на ней.