通过嵌入式 dll 从多个应用程序连接到一个 firebird 数据库

Connect from multiple applications to one firebird database via embedded dll

我对数据库编程比较陌生。我将 firebird 2.5 与 IBPP 一起使用。我至少有两个应用程序使用 sampe firebird 数据库。我想连接嵌入式变体(fbembedded.dll、icudt30.dll、icuc30.dll),因为它将成为客户 PC 上的主机应用程序。我写了一个简单的测试应用程序从数据库中读取数据并同时启动这个应用程序 3 次。一切正常。

但现在我不确定这是否始终有效,是否稳定且没有损坏数据的危险。因为当我使用查看器 ibexpert 连接数据库时,我的测试应用程序无法连接到数据库。此外,文档说 (firebirdEmbedded):

You can have multiple embedded servers running at the same time, and you can have multiple apps connecting to the same embedded server. Having a regular server already running isn't a problem either. However, an embedded server locks a database file for its own exclusive use after successful connection. This means that you cannot access the same database from multiple embedded server processes simultaneously (or from any other servers, once an embedded server has locked the file).

文档是否正确?我的示例应用程序似乎显示相反的情况。不久前我的电脑上安装了一个 firebird 超级服务器,但在测试之前卸载了它。

您参考的文档是基于Firebird 2.0 或2.1 的。 Windows 上的 Firebird Embedded 'server' 架构在 Firebird 2.5 中发生了变化。在 Firebird 2.5 之前,Windows 上的 Firebird Embedded 表现为 SuperServer,这意味着它需要独占访问数据库文件。

从 Firebird 2.5 开始,Windows 上的 Firebird Embedded 的行为类似于 SuperClassic 服务器模型,这意味着它使用对数据库文件的共享访问,并且同一个数据库可以被多个 Firebird Embedded 应用程序访问,并且Classic 或 SuperClassic 服务器模型(但不是 SuperServer)中的 Firebird 服务器,如果它们 运行 在同一台机器上 。此更改的缺点是嵌入式应用程序需要能够创建、读取和写入共享数据库锁定文件(在 C:\ProgramData\Firebird)。

您无需担心损坏:如果嵌入式引擎无法访问共享锁文件,连接将会失败。您无法连接 IB Expert 的原因可能是您试图通过具有 SuperServer 模型(需要独占访问)的 Firebird 服务器进行连接。

另请参阅 Firebird 2.5 发行说明:Changes in the Firebird Engine:

The embedded server in the Windows library, fbembed.dll, now uses Superclassic, not Superserver as previously, thus unifying its model with that of local connection to Superclassic on POSIX. The database file-lock that previously restricted connections to a single application space is replaced by a global lock table that allows simultaneous access to the same database from different embedded server modules. This facilitates concurrent debugging of applications and use of native utility tools like gbak, gstat and so on.