5

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

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

您可以同时运行多个嵌入式服务器,并且可以让多个应用程序连接到同一个嵌入式服务器。拥有一台已经运行的常规服务器也不是问题。 但是,嵌入式服务器会在成功连接后锁定数据库文件以供其独占使用。这意味着您不能同时从多个嵌入式服务器进程(或任何其他服务器,一旦嵌入式服务器锁定文件)访问同一个数据库。

文档编制正确吗?我的示例应用程序似乎相反。不久前,我在我的电脑上安装了一个 firebird 超级服务器,但在测试之前将其卸载。

4

1 回答 1

5

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

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

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

另请参阅 Firebird 2.5 发行说明:Firebird 引擎中的更改

Windows 库中的嵌入式服务器fbembed.dll现在使用 Superclassic,而不是以前的 Superserver,从而将其模型与 POSIX 上的本地连接到 Superclassic 的模型统一。以前限制与单个应用程序空间的连接的数据库文件锁被一个全局锁表所取代,该锁表允许从不同的嵌入式服务器模块同时访问同一数据库。这有助于应用程序的并发调试和gbakgstat等原生实用工具的使用。

于 2015-10-02T08:14:16.907 回答