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

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

Текущая версия на 12:18, 9 сентября 2016

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

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

Установка

  • Берем файл service.batиз директории \\SUPA\zclientxp\_releases\mendBackupRestore\ и кладем клиенту на компьютер с базой в папку ServiceMngr, которая настроена на нужную базу.
  • По умолчанию настроено, что сервис менеджер раполагается по пути: c:\Standart-N\ServiceMngr. Если это не так, то откройте батник и измените параметр options:
set options=c:\Standart-N\ServiceMngr
  • Затем запускаем service.bat от имени администратора!

Проверка

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

В случае возникновения проблем

  • Если проблема в том, что он не работает по назначенному заданию, то запустить вручную, проверить логи.
  • В service.bat вписать путь до текущей папки c:\Standart-N\ServiceMngr (если другой, то другой).
  • Запустить сервис менеджер, убедиться, что он не спрашивает имя клиента.
  • В настройках сервис-менеджера в параметре подключения к базе имя компьютера поменять на localhost.
  • В настройках сервис-менеджера в параметре подключения к базе имя базы привести к верхнему регистру, чтобы было ZTRADE.FDB
  • Проверить, что время выполнения назначенного задания не перекликается с другими заданиями.