Главная » Шпаргалка » DELPHI INTERBASE FireBird » Бекап интербейс

Бекап интербейс

не помню где нарыл инфу но расписано толково (гугл рулит).

О том, что периодическая процедура резервирования и последующего восстановления данных положительно сказывается на размере и производительности базы данных Interbase/Firebird написано во многих FAQ. Совершенно с этим согласен. Попробую рассказать, как этот процесс организован у меня.

В данное время я являюсь администратором небольшой базы (примерно 300Mb), которая довольно активно используется (примерно 1 миллион транзакций в день). При этом цикл backup/restore производятся ежедневно. Последние пару лет серьезных сбоев и поломок базы не наблюдалось.

Для автоматического резервирования и восстановления написан bat-файл. Используется утилита командной строки gbak и пару программок собственной разработки.

Обычно при backup/restore базы требуется выполнить следующие действия:

  1. Отключить всех пользователей от базы;
  2. Если все отключены запустить процедуру бэкапа в файл BACKUP.GBK;
  3. Если бэкап прошел, то запустить процедуру восстановления BACKUP.GBK в новый файл базы NEW.GDB;
  4. Если восстановление успешно, переименовать файл рабочей базы WORK.GDB в OLD.GDB;
  5. Если переименование успешно, то переименовать новый файл NEW.GDB в WORK.GDB;
  6. Скопировать BACKUP.GBK на другой диск, а лучше на другой компьютер, добавив в имя файла дату и время бэкапа.

Теперь подробнее по шагам.

Шаг 1. Выгнать пользователей из базы можно по хорошему, закрыв все программы работающие с базой. Чтобы узнать есть ли подключенные пользователи и кто они, я написал утилиту IbCheck.exe. Пример вызова:

IbCheck  <WORK.GDB>  <USER_IB>  <PASSWORD_IB>
if errorlevel 1 goto exit1

параметры:

  • WORK.GDB - полный путь к рабочей базе данных;
  • USER_IB - имя пользователя Interbase/Firebird, обычно это SYSDBA или создатель базы;
  • PASSWORD_IB - пароль пользователя.

Утилита возвращает код 0 при отсутствии соединений к базе, или код 2 и список подключенных пользователей.

Или по плохому, отрубив оставшиеся соединения командой

gfix -shut –force 10 -user  <USER_IB> -pass  <PASSWORD_IB>  <WORK.GDB>
if errorlevel 1 goto exit1

ключи:

  • -shut -force - форсированный режим отключения;
  • 10 - ждем 10 секунд отключения пользователей, потом отрубаем.

При этом я сталкивался с такой проблемой. Иногда при принудительном отрубании пользователей Windows не давала возможность переименовать файл рабочей базы на шаге 4. Приходилось останавливать и перезапускать Interbase, чтобы "освободить" файл.

Шаг 2. Бэкапим базу WORK.GDB в файл BACKUP.GBK

gbak -b -user  <USER_IB> -pass  <PASSWORD_IB> -v -g  <WORK.GDB>  <BACKUP.GBK>
if errorlevel 1 goto exit2

ключи:

  • -b - делать бэкап;
  • -g - не собирать мусор, очень полезный ключ может значительно сократить время бэкапа;
  • -v - выводить лог операций, ну просто приятно когда надписи бегут по экрану .

Шаг 3. Восстанавливаем базу в файл NEW.GDB

gbak -r -user  <USER_IB> -pass  <PASSWORD_IB> -v  <BACKUP.GBK>  <NEW.GDB>
if errorlevel 1 goto exit3

ключи:

  • -r - восстанавливаем базу;
  • -v - выводить лог операций.

Шаг 4. Переименовываем рабочую WORK.GDB базу в OLD.GDB. Не забываем сначала удалить OLD.GDB, этот файл остался с прошлого бэкапа!

del  <OLD.GDB>
ren  <WORK.GDB>  <OLD.GDB>
if errorlevel 1 goto exit4

Шаг 5. Переименовываем только что восстановленную базу NEW.GDB в WORK.GDB

ren  <NEW.GDB>  <WORK.GDB>
if errorlevel 1 goto exit5

Шаг 6. Основная работа сделана, теперь надо скопировать бэкап файл на другой физический диск, а лучше на другой компьютер. Еще, хорошо бы хранить не только последнюю копию базы, а все копии за последнюю неделю, месяц, год… сколько позволяет размер винчестера. Но для этого, как минимум, названия бэкап файлов должны содержать дату и возможно время создания. Для этих целей я использую утилиту InsDatew.exe. В качестве параметра ей требуется передать имя пакетного bat-файла. Это файл будет выполнен, а в окружении будут созданы переменные с номером года, месяца, дня и т. д. Внутри самого скрипта это можно использовать так:

Copy  <BACKUP.GBK>  <COPY_PATH>%_YEAR%_%_MONTH%_%_DAY%.GBK

Создаст копию файла под именем YYYY_MM_DD.GBK в каталоге <COPY_PATH>