Подключение из нескольких приложений к одной базе данных Firebird через встроенную DLL
Я относительно новичок в программировании баз данных. Я использую Firebird 2.5 с IBPP. У меня есть как минимум два приложения, использующих базу данных sampe firebird. Я хочу соединиться со встроенным вариантом (fbembedded.dll, icudt30.dll, icuc30.dll), так как это будет хост-приложение на клиентских ПК. Я написал простое тестовое приложение для чтения данных из базы данных и запустил это приложение три раза одновременно. Все работало
Но теперь я не уверен, работает ли он всегда и работает ли он стабильно, без опасности повреждения данных. Потому что, когда у меня есть соединение с базой данных с помощью программы просмотра ibexpert, мое тестовое приложение не может подключиться к базе данных. Кроме того, документация sais (firebirdEmbedded):
У вас может быть одновременно запущено несколько встроенных серверов, и вы можете подключить несколько приложений к одному встроенному серверу. Наличие уже работающего обычного сервера тоже не проблема.Однако после успешного подключения встроенный сервер блокирует файл базы данных для своего собственного исключительного использования.Это означает, что вы не можете получить доступ к одной и той же базе данных из нескольких встроенных серверных процессов одновременно (или с любых других серверов, когда встроенный сервер заблокировал файл).
Правильно ли документирование? Мой пример приложения, кажется, показывает обратное. У меня на компьютере был установлен суперсервер firebird некоторое время назад, но перед тестированием я удалил его.
1 ответ
Документ, на который вы ссылаетесь, основан на Firebird 2.0 или 2.1. "Серверная" архитектура Firebird Embedded в Windows была изменена в Firebird 2.5. До Firebird 2.5 Firebird Embedded в Windows вел себя как SuperServer, что означало, что он требовал эксклюзивного доступа к файлу базы данных.
Начиная с Firebird 2.5, Firebird Embedded в Windows ведет себя как модель сервера SuperClassic, что означает, что он использует общий доступ к файлам базы данных, и что к одной и той же базе данных могут обращаться различные приложения Firebird Embedded и серверы Firebird в модели серверов Classic или SuperClassic. (но не SuperServer), если они работают на одной машине. Недостатком этого изменения является то, что встроенные приложения должны иметь возможность создавать, считывать и записывать общие файлы блокировки базы данных (в C:\ProgramData\Firebird).
Вам не нужно беспокоиться о повреждении: если встроенный движок не может получить доступ к общему файлу блокировки, соединение не будет установлено. Причина, по которой вы не можете соединиться с IB Expert, заключается в том, что вы, вероятно, пытаетесь соединиться через сервер Firebird с моделью SuperServer (которая требует эксклюзивного доступа).
Смотрите также примечания к выпуску Firebird 2.5: Изменения в движке Firebird:
Встраиваемый сервер в библиотеке Windows, fbembed.dll, теперь использует Superclassic, а не Superserver, как ранее, что объединяет его модель с моделью локального подключения к Superclassic в POSIX. Блокировка файла базы данных, которая ранее ограничивала подключения к одному пространству приложения, заменяется глобальной таблицей блокировки, которая обеспечивает одновременный доступ к одной и той же базе данных из разных встроенных серверных модулей. Это облегчает параллельную отладку приложений и использование собственных утилит, таких как gbak, gstat и так далее.