Sem*_*ger 5 database firebird embedded-database firebird-embedded
我对数据库编程比较陌生。我将 firebird 2.5 与 IBPP 一起使用。我至少有两个应用程序使用 sampe firebird 数据库。我想连接嵌入式变体(fbembedded.dll、icudt30.dll、icuc30.dll),因为它将成为客户 PC 上的主机应用程序。我写了一个简单的测试应用,从数据库中读取数据,同时启动这个应用3次。一切正常。
但是现在我不确定这是否总是有效,以及是否稳定运行而不会损坏数据。因为当我使用查看器 ibexpert 与数据库建立连接时,我的测试应用程序无法连接到数据库。此外,文档 sais ( firebirdEmbedded ):
您可以同时运行多个嵌入式服务器,也可以将多个应用程序连接到同一个嵌入式服务器。拥有一个已经在运行的常规服务器也不是问题。 但是,嵌入式服务器在成功连接后会锁定数据库文件以供其独占使用。这意味着您不能同时从多个嵌入式服务器进程(或从任何其他服务器,一旦嵌入式服务器锁定文件)访问同一个数据库。
文档对吗?我的示例应用程序似乎相反。不久前我在我的电脑上安装了一个 firebird 超级服务器,但在测试之前卸载了它。
您参考的文档基于 Firebird 2.0 或 2.1。Firebird Embedded on Windows 的“服务器”架构在 Firebird 2.5 中发生了变化。在 Firebird 2.5 之前,Windows 上的 Firebird Embedded 表现为 SuperServer,这意味着它需要对数据库文件的独占访问。
从 Firebird 2.5 开始,Windows 上的 Firebird Embedded 的行为类似于 SuperClassic 服务器模型,这意味着它使用对数据库文件的共享访问,并且经典或 SuperClassic 服务器模型中的多个 Firebird Embedded 应用程序和 Firebird 服务器可以访问同一个数据库(但不是 SuperServer)如果它们在同一台机器上运行。此更改的缺点是嵌入式应用程序需要能够创建、读取和写入共享数据库锁文件(在 C:\ProgramData\Firebird 中)。
您无需担心损坏:如果嵌入式引擎无法访问共享锁文件,则连接将失败。您无法与 IB Expert 连接的原因可能是您尝试通过具有 SuperServer 模型(需要独占访问权限)的 Firebird 服务器进行连接。
另请参阅 Firebird 2.5 发行说明:Firebird 引擎的变化:
Windows 库中的嵌入式服务器fbembed.dll现在使用 Superclassic,而不是以前的 Superserver,从而将其模型与本地连接到 POSIX 上的 Superclassic 的模型统一。以前限制连接到单个应用程序空间的数据库文件锁被全局锁表取代,该表允许从不同的嵌入式服务器模块同时访问同一数据库。这有助于同时调试应用程序和使用本机实用工具(如gbak、gstat等)。