什么是 ODS 版本以及如何检索它

ODS(磁盘上结构)版本是表示数据库低级数据布局结构(ODS)版本的数字。将新功能添加到 Firebird 时,它可能需要也可能不需要更改数据库页面或系统表(数据库元数据)的结构。如果是这样,ODS 版本必须增加。

连接时检查此编号,以便服务器确保它可以理解数据库结构。例如,当你尝试将 1.0 服务器连接到使用 Firebird 2.0 创建的数据库时,你将收到错误,因为 1.0 服务器无法处理该 ODS - 只是因为有些字段的含义不明白。

Firebird 2.5 可以使用 Interbase 5,Interbase 6 和 Firebird 0.9 到 2.5 的 ODS 打开数据库。然而,Firebird 3.0 在向后兼容性方面是一个干净的开始,它不能再使用 ODS 版本的以前的 Firebird 版本打开数据库。

用户工具报告的 ODS 版本显示了创建数据库的服务器版本,例如:

InterBase® 5                                                9
InterBase® 5.5, 5.6                                        9.1
InterBase® 6    /   Firebird 1.0                          10.0
InterBase® 6.5  /   Firebird 1.5                          10.1
InterBase® 7    /   Firebird 2.0                            11
InterBase® 7.1  /   Firebird 2.1                          11.1
InterBase® 7.5  /   Firebird 2.5                          11.2
InterBase® 2007 /   Firebird 3.0                            12
InterBase® 2009                                             13
InterBase® XE                                             15.0

注 1:当针对某些 Interbase 和 Firebird 版本报告相同的 ODS 版本时,并不意味着 ODS 是相同的,因此它并不意味着跨 IB / FB 边界的兼容性! Firebird 0.9 和 1.0 以及几乎兼容的 Interbase 6.0 除外。当时预计 Interbase 将保持开源并重新使用 Firebird 项目代码。然而,随着 Interbase 6.5 的改变。这实际上意味着什么,虽然一些 Interbase / Yaffil / Firebird 数据库可能报告具有相同的 ODS 版本(数量),但它们的结构(ODS 本身)变得越来越不同。IB 7 不会打开 FB 2 数据库,反之亦然 - 它们具有不同的内部格式(ODS),而现在两个单独的项目都给它们相同的版本号。某些 IB 和 FB 版本之间的 ODS 版本可能相同,

注 2:使用 Firebird 1.5 版时,引入了 64 位版本的服务器。使用 64 位和 32 位版本的 Firebird 1.5 创建的数据库都报告了 ODS 版本 10.1,但它们的实际 ODS 有点不同,它们无法打开彼此的数据库。从已修复的 FB 2.0 开始,Firebird 服务器的 x86 和 x64 版本都可以打开彼此创建的数据库。

要检索 ODS 版本,你可以使用 Firebird API,或者只使用为你读取它的工具。

如果你只有命令行访问权限,则可以使用 Firebird 的 gstat 命令行工具(位于 bin 目录中)。它的选项 -h 输出头页面信息,其中包含 ODS:

gstat –h database_file_name

用户和密码在这里是不必要的,因为带有 -h 选项的 gstat 只读取数据库的物理部分(标题页,数字 0)。

如果 gstat 不理解读取信息,它将显示相应的消息 - 它预期的内容以及它找到的内容。

如果你只有远程连接到服务器并且你可以登录数据库,但你无法访问数据库文件本身,那么从 Firebird 2.1 开始,你还可以使用监控表通过常规 SQL 命令查询 ODS。

     select MON$ODS_MAJOR, MON$ODS_MINOR from MON$DATABASE

使用命令提示符的示例:

StackOverflow 文档

使用数据库属性的示例:

FlameRobin

StackOverflow 文档

IbExpert:

StackOverflow 文档