2015-10-02 118 views
4

Я относительно новичок в программировании базы данных. Я использую Firebird 2.5 с IBPP. У меня есть как минимум два приложения, использующие базу данных firebird sampe. Я хочу подключиться со встроенным вариантом (fbembedded.dll, icudt30.dll, icuc30.dll), так как это будет хост-приложение на клиентских ПК. Я написал простое тестовое приложение, которое считывает данные из базы данных и запускает это приложение три раза одновременно. Все сработало.Подключение нескольких приложений к одной базе данных firebird через встроенную dll

Но теперь я не уверен, если это работает всегда, и если это будет работать без опасности для коррумпированных данных. Потому что когда я имею соединение с базой данных с зрелищем ibexpert, мое тестовое приложение не может подключиться к базе данных. Кроме того, documantation саис (firebirdEmbedded):

Вы можете иметь несколько встроенных серверов, работающих одновременно, и вы можете иметь несколько приложений, подключенных к той же встроенному серверу. Наличие очередного сервера, уже запущенного, также не является проблемой. Однако встроенный сервер блокирует файл базы данных для своего собственного после успешного подключения. Это означает, что вы не можете получить доступ к одной и той же базе данных из нескольких процессов встроенного сервера одновременно (или с любых других серверов, когда встроенный сервер заблокировал файл).

Является ли документирование правильным? Мое приложение-образец, похоже, показывает обратное. Раньше у меня был суперсервер Firebird, но он удалил его перед тестированием.

ответ

3

Документ, на который вы ссылаетесь, основан на Firebird 2.0 или 2.1. Архитектура Firebird Embedded в Windows была изменена в Firebird 2.5. До Firebird 2.5 Firebird Embedded on Windows вела себя как SuperServer, что означает, что для этого требуется эксклюзивный доступ к файлу базы данных.

Начиная с Firebird 2.5, Firebird Embedded on Windows ведет себя как модель сервера SuperClassic, что означает, что он использует общий доступ к файлам базы данных и что к одной базе данных могут обращаться несколько приложений Firebird Embedded и серверы Firebird в Classic или SuperClassic (но не SuperServer), если они работают на том же компьютере. Недостатком этого изменения является то, что встроенные приложения должны иметь возможность создавать, читать и писать файлы блокировки общих баз данных (в C: \ ProgramData \ Firebird).

Вам не нужно беспокоиться о коррупции: если встроенный движок не может получить доступ к общему файлу блокировки, соединение не удастся. Причина, по которой вы не можете подключиться к IB Expert, вероятно, заключается в попытке подключиться через сервер Firebird с помощью модели SuperServer (что требует эксклюзивного доступа).

Смотрите также Firebird примечания к выпуску 2,5: Changes in the Firebird Engine:

Встроенный сервер в библиотеке Windows, fbembed.dll, теперь использует Superclassic, не Superserver как и ранее, таким образом, объединяя свою модель с этим из локальное подключение к суперклассике на POSIX. Файловая блокировка базы данных, которая ранее ограничивала подключения к одному пространству приложений, заменяется глобальной таблицей блокировки, которая позволяет одновременный доступ к одной базе данных из разных встроенных серверных модулей. Это облегчает параллельную отладку приложений и использование встроенных служебных программ, таких как gbak, gstat и так далее.

+0

Почему «нужно иметь возможность создавать, читать и писать общие блокировки базы данных»? –

+1

@Ergodicity Я не использую встроенные функции (за исключением тех случаев, когда тестирование встроенной поддержки в JDBC-драйвере для Firebird), но насколько я понимаю, что запуск приложения как пользователя с ограниченными правами может вызвать проблемы, если C: \ ProgramData \ Firebird еще не существует, или пользователь не имеет прав на создание файлов и запись на этот путь. Возможно, вам понадобится убедиться, что путь существует (с правильными привилегиями) при установке приложения. –

+1

Я не создавал несколько программ, используя одну и ту же базу данных одновременно. Итак, подключайтесь из нескольких приложений к одной базе данных firebird через встроенную DLL SEEMS TO WORK в повседневном использовании. В прошлом году ни у меня, ни у тестеров, ни у клиентов не было проблем. Хотя мы не использовали специальные стресс-тесты, чтобы доказать, что он работает при любых условиях. –

 Смежные вопросы

  • Нет связанных вопросов^_^