powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / 2 версии Firebird на одной машине и gbak
24 сообщений из 24, страница 1 из 1
2 версии Firebird на одной машине и gbak
    #39453626
fortress
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В системе утсановлено 2 версии Firebird: 2.5.4 и 2.1.
Версия 2.1 установлена штатным установщиком, версия 2.5.4 - через instsvc (с заменой в конфиге порта для прослушивания на 3052).
Запись в реестре для Firebird 2.1
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\FirebirdServerDefaultInstance]
"Type"=dword:00000010
"Start"=dword:00000003
"ErrorControl"=dword:00000001
"ImagePath"="C:\Program Files\Firebird\Firebird_2_1\bin\fbserver.exe" -s DefaultInstance"
"DisplayName"="Firebird Server - DefaultInstance"
"ObjectName"="LocalSystem"
"Description"="Firebird Database Server - www.firebirdsql.org"



Запись в реестре для Firebird 2.5.4
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\FirebirdServerfb254]
"Type"=dword:00000010
"Start"=dword:00000003
"ErrorControl"=dword:00000001
"ImagePath"="C:\Program Files\Firebird\Firebird_2_5_4\bin\fbserver.exe" -s fb254"
"DisplayName"="Firebird Server - fb254"
"ObjectName"="LocalSystem"
"Description"="Firebird Database Server - www.firebirdsql.org"



Через Path виден gbak только от версии 2.1:
Код: sql
1.
2.
C:\>where gbak
C:\Program Files\Firebird\Firebird_2_1\bin\gbak.exe



В системе установлена клиентская библиотека от версии 2.1:
Код: sql
1.
2.
3.
4.
5.
C:\Program Files\Firebird\Firebird_2_1\bin>instclient q g
Installed GDS32.DLL version : 6.3.5.18496 (shared DLL count 4)

C:\Program Files\Firebird\Firebird_2_1\bin>instclient q f
Installed FBCLIENT.DLL version : 2.1.5.18496 (shared DLL count 1)



Теперь о проблеме.
В IBExpert делаю восстановление базы данных из бекапа, получаю файл с ODS 11.2. Т.е. при восстановлении используется Firebird 2.5. Как сделать так, чтобы при восстановлении из бекапа в IBExpert получался файл для Firebird 2.1 (ODS 11.1)? Каким образом IBExpert узнает что в системе есть Firebird 2.5.4 если у него нестандартный порт, он не виден через PATH и запись службы в рееестре не "DefaultInstance"?
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453632
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
напомнило мои метания :)

зы. нет просто сервера 2.1
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453643
dedRasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так IBEx позвояет в регинфо для каждой БД прописать свой клиент и свою строку соединения.
У меня на машинке три FB разных версий и вроде с backup/restore проблем нет - главное, самому не ошибиться. Кстати, для каждой БД в настройках IBEx можно прописать папку по умолчанию для backup/restore - это тоже облегчает жизнь.
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453645
fortress
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

IPCName у обоиз серверов дефолтные:
Код: sql
1.
#IpcName = FIREBIRD


Если менять, то каким образом?
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453646
dedRasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так IBEx позвояет в регинфо для каждой БД прописать свой клиент и свою строку соединения.
У меня на машинке три FB разных версий и вроде с backup/restore проблем нет - главное, самому не ошибиться. Кстати, для каждой БД в настройках IBEx можно прописать папку по умолчанию для backup/restore - это тоже облегчает жизнь.
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453651
fortress
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dedRasta,

Для существующих баз да, есть такое. А мне понадобилось создать новую базу данных. Я в IBExpert выбираю "Службы\Восстановление баз данных" и там выбираю создать новую БД.
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453653
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortressЕсли менять, то каким образом?
в firebird.conf

Посмотри внимательно обсуждение по моей ссылке. Там тоже есть ссылка на предыдущую тему.

Если я правильно ошибаюсь, дефолтного инстанса на машине вообще не должно быть, если хочешь запускать несколько серверов на одной машине одновременно. Потому что бекапы будут идти в той ODS, чей инстанс будет прописан в реестре, как умолчательный. Если я не прав, щас меня поправят :)

У Димы на ibase.ru статья была хорошая. Только я не помню, внес туда эти нюансы или нет.
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453659
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortressЯ в IBExpert выбираю "Службы\Восстановление баз данных" и там выбираю создать новую БД.

Принудительно укажи используемый для этого номер порта.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453660
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortressВ IBExpert делаю восстановление базы данных из бекапа, получаю файл с ODS 11.2. Т.е. при восстановлении используется Firebird 2.5. Как сделать так, чтобы при восстановлении из бекапа в IBExpert получался файл для Firebird 2.1 (ODS 11.1)?Не использовать локальный коннект.
Или отключить XNET для одного из экземпляров сервера.

fortressКаким образом IBExpert узнает что в системе есть Firebird 2.5.4Никаким. Он понятия об этом не имеет. И не должен, пока ему явно не укажут.

PS firebird.log, я так понимаю, никто и никогда не читал...
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453662
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докв firebird.conf
например, у меня сейчас крутятся два сервера. У обоих в конфигах соответственно прописано так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
RemoteServiceName = gds_db_3217
RemoteServicePort = 3217
IpcName = FIREBIRD_3217
...
RemoteServiceName = gds_db_3302
RemoteServicePort = 3302
IpcName = FIREBIRD_3302


запущены так (лучше сразу в реестре сунь в автозагрузку)
Код: sql
1.
2.
3.
"D:\Portable_program\Firebird_server\Firebird_2_1_7\bin\fbserver.exe" -a -p 3217
...
"D:\Portable_program\Firebird_server\Firebird_3_0_2\firebird.exe" -a -p 3302


соответственно коннект к соответствующим базам
Код: sql
1.
2.
3.
localhost/3217:d:\база_ODS_11.1
...
localhost/3302:d:\база_ODS_12.0


При бекапе так же нужно указывать сервер/порт перед строкой коннекта.
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453702
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortressВ IBExpert делаю восстановление базы данных из бекапа
казалось бы, и при чем тут гбак и прочее жизнеописание?
IBExpert делает бэкап-рестор через services api. Соответственно, рестор делает тот сервер, к которому идет коннект.
А сервер всегда создает базу только в своем родном формате.

В том числе см. вторую часть
http://www.ibase.ru/prevver/
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453710
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокПотому что бекапы будут идти в той ODS, чей инстанс будет прописан в реестре, как умолчательный.
господи боже...
форматы будут те, которые сервера, к которому коннект. Коннект к 2.5 - бэкап будет ресторен в формате 2.5.
Ресторит сервер, а не гбак. Гбак или сервисное апи всего-лишь командует серверу "создать БД" и так далее.

Вечно вы про клиент-сервер забываете :-)

http://www.ibase.ru/gbak/#bsapi
http://www.ibase.ru/gbak/#rservapi

Про "дефолтные инстансы" забудь. Дефолтный инстанс это просто некоторый гемор в администрировании ДВУХ серверов, не более того. Ни на какие форматы он не влияет и влиять не может.

Если ты имел в виду статью про ручную установку, то это тут
http://www.ibase.ru/inst_manual/
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453727
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvГбак или сервисное апи всего-лишь командует серверу "создать БД" и так далее.

Вот только он при этом использует для коннекта порт, прописанный в firebird.conf, который
ищется (в первую очередь) через запись в реестре, что и приводит к вышеописанному.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453731
dedRasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я новую БД в IBEx создаю через Database->Create database. При этом выводится форма, в которой можно прописать и клиента и строку соединения.
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453753
fortress
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак, IBExpert делает рестор через service API. В моем случае получается что эти команды передаются серверу версии 2.5 (который устанавливался вручную).
Правильно ли я понимаю что, поскольку я указываю локальный путь к базе данных (без локкалхосов и портов), то используется локальный протокол XINET. Обрабатывать команды по этому протоколу может только один (?) из сервереров потому что сейчас они оба используют одно и то же IPCName=FIREBIRD и из-за этого конфликтуют. У меня последний раз компьютер перезагружался вчера, Process Explorer подсказывает, что 2.5 запустился на 2 секунды раньше чем 2.1. Возможно ли что 2.5 успел присвоить себе IPCName=FIREBIRD и такми образом стать дефолтным обработчиком команд которые отправляет IBExpert через services api?
Я пытаюсь для себя понять как происходит восстановление бекапа через IBExpert и почему восстановлением в итоге занимается сервер именно 2.5, а не 2.1.

hvladPS firebird.log, я так понимаю, никто и никогда не читал...
Фрагменты логов для Firebird 2.1:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
USER (Client)	Mon May 15 14:27:13 2017
	Guardian starting: "C:\Program Files\Firebird\Firebird_2_5_4\bin\fbserver.exe"
USER (Server)	Mon May 15 14:27:14 2017
	XNET error: Server initialization failed
USER (Server)	Mon May 15 14:27:14 2017
	Database: 
USER (Client)	Mon May 15 14:27:15 2017
	Guardian starting: "C:\Program Files\Firebird\Firebird_2_1\bin\fbserver.exe"
USER (Client)	Mon May 15 18:07:07 2017
	INET/inet_error: connect errno = 10061
USER (Client)	Mon May 15 18:07:10 2017
	INET/inet_error: connect errno = 10061


Фрагменты логов для Firebird 2.5.4

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
USER (Server)	Thu Mar 16 15:36:06 2017
	XNET error: XNET server initialization failed. Probably another instance of server is already running.
	operating system directive CreateMutex failed
	Невозможно создать файл, так как он уже существует. 
USER (Server)	Thu Mar 23 08:49:23 2017
	XNET error: XNET server initialization failed. Probably another instance of server is already running.
	operating system directive CreateMutex failed
	Невозможно создать файл, так как он уже существует. 
USER (Server)	Tue Apr 11 12:12:39 2017
	XNET error: XNET server initialization failed. Probably another instance of server is already running.
	operating system directive CreateMutex failed
	Невозможно создать файл, так как он уже существует.

...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453766
fortress
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил сейчас. Восстановлением базы данных занимается тот экземпляр сервера, который раньше запустился.
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39453768
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortressи из-за этого конфликтуют.
тебе hvlad об этом и сказал. В том числе - не использовать локальный коннект. Если ты переименуешь ipcname в конфиге, то клиентская часть будет подбирать или конфиг по пути в реестре для defaultinstance, либо "рядом". Поэтому все это ненадежно. Таким образом, локальный протокол действительно лучше не использовать.

Кроме того, если в конфиге инстансу изменен порт, и этот конфиг принадлежит DefaultInstance, который есть в реестре, то клиентская либа БЕЗ указания порта будет соединяться именно с инстансом на этом измененном порту. Поэтому при двух серверах желательно НЕ использовать записи в реестре (instreg remove).
Ну и как я сказал выше, клиентская либа, если указываешь ее в ибэксперте, тоже может брать конфиг из папки выше, где она лежит.
Таким образом, если хочешь работать с каким-то инстансом, и их два и более на одном компе, то не только не нужно использовать локальный коннект, но еще и нужно явно указывать порт при соединении по tcp. Чтобы не было потом удивлений, почему "сервер не тот".
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39454530
fortress
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В итоге поменял IPCName для Firebird 2.5
Код: sql
1.
IPCName=FIREBIRD25


а для Firebird 2.1 оставил по умолчанию
Код: sql
1.
IPCName=FIREBIRD


Теперь при восстановлении БД через локальный протокол в IBExprt'e он будет отправлять команды сереверу с дефолтным именем, т.е. Firebird 2.1.
Если потребуется явно указать, что восстановлением базы данных из бекапа должен заниматься Firebird 2.5, то путь к базе данных нужно указывать через localhost:
Код: sql
1.
localhost/3052:D:\Database.fdb
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39454775
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortressчерез локальный протокол в IBExprt'e он будет отправлять команды сереверу с дефолтным именем
"он" - это кто?
серверу команды отправляет клиент fbclient.dll. А если он прочитает конфиг от 2.5?
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39460234
fortress
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Он" - имелся ввиду IBExpert, который через service api передает команды серверу.
Да, получается что в итоге вызываются функции из клиентской библиотеки.
kdvА если он прочитает конфиг от 2.5?
Во-превых, честно не понимаю, что будет если он прочитает конфиг от 2.5. Во-вторых, думаю что при нормальной установке такого случится не должно.
Если я правильно понял из предидущего обсуждения, то клиент ищет конфиг либо в папке на уровень выше себя, либо по пути из ветки реестра, в которой указано "DefaultInstance".
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39460242
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fortressВо-превых, честно не понимаю, что будет если он прочитает конфиг от 2.5.
он будет использовать тот ipcname, который прочитает из конфига.
fortress Во-вторых, думаю что при нормальной установке такого случится не должно.
при нормальной установке ipcname в конфигах одинаков.
Если же ты меняешь ipcname, то фактически при локальном коннекте полагаешься на волю случая. Потому что с течением времени может измениться что угодно. Или клиентская либа будет лежать "не там", или в реестре будет путь "не к тому" Firebird, и т.д.
Не надо закладываться на неоднозначности.
Хоть какая-то гарантия однозначности будет если использовать Embedded конкретной версии для конкретного приложения. Иначе локальный коннект лучше не использовать (при двух разных серверах, работающих как службы).
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39460273
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvон будет использовать тот ipcname, который прочитает из конфига
Дим, да напиши ты наконец у себя внятно про этот злосчастный параметр, я тебе еще когда это предложил :)
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39460381
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокДим, да напиши ты наконец у себя внятно про этот злосчастный параметр
это скорее не про параметр, а про локальный коннект. Причем, лично я локальный коннект просто не люблю, потому что
- раньше при работе сервера службой локальный коннект просто не работал
- раньше локальный коннект мог просто не работать из-за бага (пример - ФБ 1.5.1)
- сейчас локальный коннект другой, и в 3.0 появились нововведения типа указания протокола коннекта, но все-таки...
- при коннекте по IP инстанс на конкретном порту можно легко идентифицировать. Куда идет локальный коннект - не идентифицировать никак.

Поэтому я считаю, что локальный коннект имеет смысл либо при Embedded, либо при только одном инстансе ФБ на компе.
Как только инстансов больше - от греха лучше локальный коннект не использовать (в случае не-Embedded).

конечно, всю эту хню, включая настройки, надо описать, но только даже по этому топику я вижу, что человек все равно не понимает.
...
Рейтинг: 0 / 0
2 версии Firebird на одной машине и gbak
    #39460400
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvчеловек все равно не понимает
я тоже не понимал, пока не прочитал твою статью раз 5 ;) А вот из-за остального пришлось людей тут тревожить
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / 2 версии Firebird на одной машине и gbak
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]