2016-07-02 5 views
0

Я настраиваю сценарии резервного копирования и восстановления в реальном времени, чтобы иметь «реплицированные» firebird dbs на основном и резервном серверах. резервного копирования делает хорошо:Восстановление Firebird 2.5 с помощью fbsvcmgr

"C:\Program Files\Firebird\Firebird_2_5\bin\nbackup" -B 0 "D:\testdb\LABORATORY_DB.FDB" D:\testdb\lab_FULL.fbk -user SYSDBA -pass masterkey -D OFF 

Копирование файлов на удаленный сервер, а также:

net use R: \\fbserv2\reserve 
xcopy /Y D:\testdb\lab_FULL.fbk R:\ 

Но восстановление на удаленной стороне

"C:\Program Files\Firebird\Firebird_2_5\bin\fbsvcmgr.exe" fbserv2:service_mgr -user SYSDBA -password masterkey -action_nrest -dbname d:\reservedb\LABORATORY_DB.FDB -nbk_file d:\reserve\lab_FULL.fbk 

вызвал ошибку:

Error (80) creating database file: d:\reservedb\LABORATORY_DB.FDB via copying from: d:\reserve\lab_FULL.fbk 

Единственный способ восстановить базу данных - это вручную удалить старый d: \ reservedb \ LABORATORY_DB.FDB перед восстановлением. GBAK имеет возможность перезаписать файл Restorig db, а fbsvcmgr - нет. Есть ли другой вариант? Я что-то пропустил?

ответ

0

Вы не можете восстановить существующую базу данных с помощью nbackup. Вы либо должны

  1. удалить старую базу данных, а затем восстановить,
  2. или восстановить под другим именем, удалите старую базу данных и переименуйте новую базу данных для его окончательного названия.

Смотрите также документацию утилиты NBackup, глава Making and restoring backups:

If the specified database file already exists, the restore fails and you get an error message.

Насколько я знаю, это было дизайнерское решение, чтобы не допустить перезаписи существующей базы данных. У Гбака действительно есть этот вариант, но только по историческим причинам; если бы он был построен сегодня, у него, скорее всего, не было бы такого варианта.