Бекап і відновлення бази interbase

Бекап і відновлення бази 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
if errorlevel 1 goto exit1

параметри:
  • WORK.GDB - повний шлях до робочої базі даних;
  • USER_IB - ім'я користувача Interbase / Firebird, зазвичай це SYSDBA або творець бази;
  • PASSWORD_IB - пароль користувача.
Утиліта повертає код 0 при відсутності з'єднань до бази, або код 2 і список підключених користувачів. Або по поганому, відрубавши залишилися з'єднання командою gfix -shut -force 10 -user -pass
if errorlevel 1 goto exit1 ключі:
  • -shut -force - форсований режим відключення;
  • 10 - чекаємо 10 секунд відключення користувачів, потім відрубуємо.
При цьому я стикався з такою проблемою. Іноді при примусовому відрубування користувачів Windows не давала можливість перейменувати файл робочої бази на кроці 4. Чи доводилося зупиняти і перезапускати Interbase, щоб "звільнити" файл. Крок 2. бекапіть базу WORK.GDB в файл BACKUP.GBK gbak -b -user -pass -v -g
if errorlevel 1 goto exit2 ключі:
  • -b - робити бекап;
  • -g - Чи не маєте наміру сміття, дуже корисний ключ може значно скоротити час бекапа;
  • -v - виводити лог операцій, ну просто приємно коли написи біжать по екрану.
Крок 3. Відновлюємо базу в файл NEW.GDB gbak -r -user -pass -v
if errorlevel 1 goto exit3 ключі:
  • -r - відновлюємо базу;
  • -v - виводити лог операцій.

Крок 4. Перейменовуємо робочу WORK.GDB базу в OLD.GDB. Не забуваємо спочатку видалити OLD.GDB, цей файл залишився з минулого бекапа! del
ren
if errorlevel 1 goto exit4

Крок 5. Перейменовуємо тільки що відновлену базу NEW.GDB в WORK.GDB ren
if errorlevel 1 goto exit5

До речі, можна відразу стискати бекап файл якихось архиватором. Але це вже інша історія.

Як бачите все досить просто.

А на закінчення пропоную бажаючим bat-файл і утиліти з вихідними текстами: br.bat - bat-файл для автоматичного backup / restore. Всі назви баз, шляхи, паролі і т. Д. Налаштовуються. Скрипт потрібно запускати на тій же машині, де знаходиться база даних. Утиліти IbCheck і InsDatew краще покласти поруч з bat-файлом.
IbCheck - консольна утиліта перевірки підключених користувачів (163K; з вихідним кодом на Delphi).
InsDateW - консольна утиліта вставки дати і часу в змінні оточення (28.2K; з вихідним кодом на Delphi).

Будь ласка, оцініть статтю

Схожі статті