Можно ли сделать резервную копию БД Firebird при использовании SuperServer на Windows Server 2016?

Когда я выполняю команду резервного копирования Firebird 3.0.x:

c:\Db>"C:\Program Files\Firebird\Firebird
c:\Db>"c:\Program Files\Firebird\Firebird_3_0\gbak.exe" -backup inet://c:\Db\Db1.fdb d:\_Backups\Db1_20180702_230546.fbk -garbage_collect -transportable -verify -skip_data SOMETAB_TO_SKIP -user SYSDBA -password PASSWORD123
0\gbak.exe" -b c:\Db\Db1.fdb c:\Db\Db1_backup.fbk -garbage_collect -transportable -verify -user SYSDBA -pas PASSWORD

Произошла ошибка 1:

gbak: ERROR:I/O error during "CreateFile (open)" operation for file "C:\DB\DB1.FDB"
gbak: ERROR:    Error while trying to open file
gbak: ERROR:    The process cannot access the file because it is being used by another process.
gbak:Exiting before completion due to errors

Пример 2 с протоколами TCP/INET/localhost/remote:

c:\Db>"c:\Program Files\Firebird\Firebird_3_0\gbak.exe" -backup inet://c:\Db\Db1.fdb d:\_Backups\Db1_20180702_230546.fbk -garbage_collect -transportable -verify -skip_data SOMETAB_TO_SKIP -user SYSDBA -password PASSWORD123

Произошла ошибка 2:

gbak: ERROR:Your user name and password are not defined. Ask your database administrator to set up a Firebird login.

Во-первых... если честно, я не знаю, когда это началось и почему. Я не смотрел на свой сервер, может быть, 3 месяца, но сегодня мой резервный диск сломался, поэтому мне пришлось. Я только сегодня впервые увидел эту ошибку и жил убеждением, что моя резервная копия работает. Но раньше у меня был Firebird 2.5.

Вопрос в том, относится ли это только к Firebird 3 SuperServer в Windows? И нет способа сделать резервную копию базы данных Firebird 3 SuperServer, когда она используется сервером FB?

Протестировано и не удалось на сервере Firebird 3.0.2 и 3.0.3 в Windows Server 2016.

Firebird работает как служба

В firebird.config ничего не меняется, кроме:

WireCompression = true
RemoteServicePort = 1234
CpuAffinityMask = 8
ServerMode = Super or SuperClassic (when I testing it)

Когда я выполняю первую команду на SuperClassic, она работает.

Когда я выполняю первую команду на SuperServer 2.5.x, она работает.


person mojmir.novak    schedule 30.06.2018    source источник
comment
Я не могу воспроизвести это; эта команда отлично работает для меня, даже когда база данных используется. Какую именно версию Firebird вы используете (полный номер версии)?   -  person Mark Rotteveel    schedule 01.07.2018
comment
Это 3.0.2 версия. Строка ServerMode = Super в firebird.conf должна быть активирована. (Требуется перезагрузка ФБ). С ServerMode = SuperClassic или просто с Classic все работает нормально, но я предпочитаю SuperServer из-за меньшего потребления памяти.   -  person mojmir.novak    schedule 01.07.2018
comment
Что произойдет, если вы обновитесь до 3.0.3? Не могли бы вы опубликовать конфиг настройки Providers в firebird.conf?   -  person Mark Rotteveel    schedule 01.07.2018
comment
У меня провайдеры выставлены по дефолту (значит без изменений): #Providers = Remote,Engine12,Loopback Думаю обновление до 3.0.3 ничего бы не изменило. Я думаю, что это стандартное поведение для суперсервера версии 3+.   -  person mojmir.novak    schedule 01.07.2018
comment
Я протестировал его с 3.0.3 SuperServer, и он отлично работает. Поэтому, если у вас все еще есть проблема с 3.0.3, я предполагаю, что это могла быть ошибка, исправленная в 3.0.3.   -  person Mark Rotteveel    schedule 01.07.2018
comment
Это должно было означать, что ваша команда gbak пытается использовать режим встроенного сервера, который немного менее предсказуем в Windows с FB3 (в UNIX граница между автономным и встроенным сервером всегда была менее четкой). Попробуйте поместить префиксы TCP/IP в строку подключения gbak, что по совпадению запретит режим Embedded Server. firebirdsql.org/file/documentation/release_notes/html/en/3_0/   -  person Arioch 'The    schedule 02.07.2018
comment
Кроме того, мне интересно, использует ли gbak какой-то другой Firebird.conf, чем серверный процесс, и, возможно, gbak думает, что он все еще работает в классическом режиме. Проверьте ввод-вывод файлов gbak с помощью таких инструментов, как SysInternals Process Monitor, какие файлы он читает, возможно, в Windows VirtualStore сохранены старые конфигурации или что-то в этом роде.   -  person Arioch 'The    schedule 02.07.2018
comment
Я пробовал версию 3.0.3, но поведение такое же. Я проверил свой компьютер с помощью утилиты Everything Search на наличие firebird.conf, но нашел только 1. Это новый Win Server 2016, поэтому он чист. Когда я пытаюсь использовать префиксы TCP/IP, отображается другая ошибка. gbak: ERROR:Your user name and password are not defined. Ask your database administrator to set up a Firebird login. gbak:Exiting before completion due to errors   -  person mojmir.novak    schedule 03.07.2018
comment
и моя строка cmd: "c:\Program Files\Firebird\Firebird_3_0\gbak.exe" -backup inet://c:\Db\Db1.fdb d:\_Backups\Db1_20180702_230546.fbk -garbage_collect -transportable -verify -skip_data SOMETAB_TO_SKIP -user SYSDBA -pas SOMEPASS   -  person mojmir.novak    schedule 03.07.2018
comment
Пожалуйста, отредактируйте свой вопрос и добавьте эту информацию в сам вопрос. Кстати: Firebird работает как служба или как приложение? Вы уверены, что пароль правильный? Вы пробовали использовать полную опцию командной строки -password?   -  person Mark Rotteveel    schedule 03.07.2018
comment
Должно было означать, что он не создал одного или обоих пользователей SYSDBA... (или установил одному из них пароль, отличный от SOMEPASS)   -  person Arioch 'The    schedule 03.07.2018
comment
пароль правильный, потому что он работает с опцией SuperClassic. -pas или -password такое же поведение. Я обновил вопрос с этой информацией.   -  person mojmir.novak    schedule 04.07.2018


Ответы (1)


Итак, я наконец понял, в чем проблема. Вот объяснение:

Мой пароль неверный!

НО!

Когда я использую SuperClassic, я могу использовать НЕВЕРНЫЙ пароль, а Firebird разрешает доступ к базе данных. (как локальный пользователь)

Когда я использую SuperServer, я могу использовать НЕПРАВИЛЬНЫЙ пароль, а Firebird разрешает доступ к базе данных, КОГДА я ПЕРВОЕ соединение! (как локальный пользователь с удаленными протоколами и без них)

Когда я использую SuperServer и я использую НЕПРАВИЛЬНЫЙ пароль, Firebird отказал в доступе к базе данных, КОГДА я являюсь вторым (и более) подключением! (локальный и удаленный пользователь)

Только с удаленными протоколами вы не можете получить доступ к базе данных с неправильным паролем.

(Под удаленными протоколами я подразумеваю это.)

Это причины различий в поведении и почему я не видел использования НЕПРАВИЛЬНОГО пароля. Спасибо всем, кто пытался мне помочь.

person mojmir.novak    schedule 04.07.2018