nbackup: быстрое резервное копирование Firebird

База на десятки гигабайт, gbak молотит часами, а система 24/7? Для этого случая в поставке Firebird (с версии 2.1) есть nbackup — утилита физического (постраничного) бэкапа: она делает мгновенный снапшот базы, а все изменения во время копирования пишет во временный файл дельты (.delta). Пользователи продолжают работать.

nbackup vs gbak

Критерийnbackupgbak
ТипФизический (копия страниц)Логический (выгрузка данных)
СкоростьМгновенный снапшотМедленно на больших базах
Проверка целостностиНет — копирует как естьДа, валидирует записи
СжатиеНетДа (.fbk)
Перенос между версиями/платформамиНетДа
ИнкрементальностьДа, уровни 0–8Нет

Это не «или–или»: связка — стандарт де-факто для больших баз 24/7.

Команды

nbackup -B 0 база              # полный бэкап уровня 0 (снапшот)
nbackup -B 1 база backup1.nbk  # инкремент уровня 1 (от уровня 0)
nbackup -R база backup0.nbk backup1.nbk  # восстановление: слить дельты
nbackup -F база                # зафиксировать дельту после ручного копирования файла

Уровни: -B 0 — полная копия, -B 1..8 — инкременты относительно предыдущего уровня. Дельты пишутся в .delta-файлы, уровни идут строго по порядку.

Восстановление

Восстановление — слияние дельт командой -R. Результат — не .fbk, а обычная копия страниц базы: переименуйте файл в .fdb и запустите сервер. RTO минимальный — никакой длинной процедуры восстановления, как у gbak.

Стратегия «и–и»

Маленькой базе (пара гигабайт) хватает одного gbak.

Грабли

ПроблемаЧто делать
Файл снапшота скопировали «попозже»Копируйте сразу: дельта продолжает писаться и растёт
При восстановлении пропущен уровеньУровни нужны все и по порядку — храните цепочку
База была битой до бэкапаnbackup не проверяет целостность — честно скопирует мусор; базу проверяют gbak/gfix
Блокировки на Firebird 2.5Использовать свежие версии — блокировочные баги 2.5 давно исправлены
Скопировали файл вручнуюПосле успешного копирования — nbackup -F база, иначе дельта растёт вечно

Что почитать дальше

Обсуждение