Бэкап и восстановление базы Interbase/Firebird
© 2005 Сергей Тулаев
О том, что периодическая процедура резервирования и последующего восстановления данных положительно сказывается на размере и производительности базы данных Interbase/Firebird написано во многих FAQ. Совершенно с этим согласен. Попробую рассказать, как этот процесс организован у меня.
В данное время я являюсь администратором небольшой базы (примерно 300Mb), которая довольно активно используется (примерно 1 миллион транзакций в день). При этом цикл backup/restore производятся ежедневно. Последние пару лет серьезных сбоев и поломок базы не наблюдалось.
Для автоматического резервирования и восстановления написан bat-файл. Используется утилита командной строки gbak и пару программок собственной разработки.
Обычно при backup/restore базы требуется выполнить следующие действия:
- Отключить всех пользователей от базы;
- Если все отключены запустить процедуру бэкапа в файл BACKUP.GBK;
- Если бэкап прошел, то запустить процедуру восстановления BACKUP.GBK в новый файл базы NEW.GDB;
- Если восстановление успешно, переименовать файл рабочей базы WORK.GDB в OLD.GDB;
- Если переименование успешно, то переименовать новый файл NEW.GDB в WORK.GDB;
- Скопировать BACKUP.GBK на другой диск, а лучше на другой компьютер, добавив в имя файла дату и время бэкапа.
Теперь подробнее по шагам.
Шаг 1. Выгнать пользователей из базы можно по хорошему, закрыв все программы работающие с базой. Чтобы узнать есть ли подключенные пользователи и кто они, я написал утилиту IbCheck.exe. Пример вызова:
IbCheck <WORK.GDB> <USER_IB> <PASSWORD_IB>параметры:
if errorlevel 1 goto exit1
Утилита возвращает код 0 при отсутствии соединений к базе, или код 2 и список подключенных пользователей.
- WORK.GDB - полный путь к рабочей базе данных;
- USER_IB - имя пользователя Interbase/Firebird, обычно это SYSDBA или создатель базы;
- PASSWORD_IB - пароль пользователя.
Или по плохому, отрубив оставшиеся соединения командой
gfix -shut –force 10 -user <USER_IB> -pass <PASSWORD_IB> <WORK.GDB>ключи:
if errorlevel 1 goto exit1
При этом я сталкивался с такой проблемой. Иногда при принудительном отрубании пользователей Windows не давала возможность переименовать файл рабочей базы на шаге 4. Приходилось останавливать и перезапускать Interbase, чтобы "освободить" файл.
- -shut -force - форсированный режим отключения;
- 10 - ждем 10 секунд отключения пользователей, потом отрубаем.
Шаг 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>
Кстати, можно сразу сжимать бэкап файл каким либо архиватором. Но это уже другая история
.
Как видите все достаточно просто.
А в заключение предлагаю желающим bat-файл и утилиты с исходными текстами:
br.bat - bat-файл для автоматического backup/restore. Все названия баз, пути, пароли и т. д. настраиваются. Скрипт нужно запускать на той же машине, где находится база данных. Утилиты IbCheck и InsDatew лучше положить рядом с bat-файлом.
IbCheck - консольная утилита проверки подключенных пользователей (163K; с исходным кодом на Delphi).
InsDateW - консольная утилита вставки даты и времени в переменные окружения (28.2K; с исходным кодом на Delphi).
Copyright© 2005 Сергей Тулаев Специально для Delphi Plus
Пожалуйста, оцените статью
| 2011 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2010 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2002 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2001 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2000 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 1999 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
- Компания по разработке программного обеспечения
- Услуги аутсорсинга в области программирования
- Как продлить срок службы картриджей
- Мошенничество во Всемирной Паутине. Осторожно: фишинг!
- Web-студия
- Как легально поднять уровень индекса цитирования.
- Мы реально сможем помочь вам в управлении предприятием
- Создание сайтов – популяризация вашего замысла
- Свой сайт. Управление ресурсом
- Семантическое ядро сайта или правила подбора ключевых фраз
- Программирование в среде Delphi 8 for .NET
- Практикум по Delphi для решения прикладных задач
- Фундаментальные алгоритмы и структуры данных в Delphi
- Delphi 6. Программирование на Object Pascal
- Delphi и технология COM
- Delphi в шутку и всерьез: что умеют хакеры
- Программирование в Delphi глазами хакера
- Delphi 2005. Секреты программирования
- Искусство создания компонентов Delphi
- Приемы программирования в Delphi на основе VCL
- Программирование баз данных в Delphi 7
- Программирование баз данных в Delphi
- Программирование в среде Delphi
- Программирование в Delphi 7
- Язык SQL в Delphi 5