【问题标题】:Which version of Interbase or Firebird was a database created under?数据库是在哪个版本的 Interbase 或 Firebird 下创建的?
【发布时间】:2012-04-02 07:45:45
【问题描述】:

我有一个扩展名为 .ib 的文件。我猜它是 InterbaseFirebird 文件,但我无法确定到底是哪个文件。此外,尚不清楚使用 Interbase(或 Firebird)的哪个版本来创建文件。

到目前为止我发现了什么:

我尝试了各种不同的软件来读取这个文件(FlameRobin、Firebird 的 isql.exe 以及最新版本的 Interbase),我收到的错误消息告诉我 ODS(“磁盘结构”)是第 9 版。相当古老,可以追溯到 Firebird 从 Interbase 分叉的时候。

我已经设法连接到数据库并使用 Firebird 查询它,但我遇到的一些错误让我相信它实际上是一个 Interbase 数据库(如果需要,我可以进一步解释)

有没有一种万无一失的方法来确定准确我正在处理哪种数据库?即它是 Interbase 还是 Firebird 文件,如果是,它是用哪个版本编写的?

编辑: gstat.exe -h 的输出使用 Firebird 2.5 运行:

Database header page information:
    Flags           0
    Checksum        12345
    Generation      7558
    Page size       4096
    ODS version     9.1
    Oldest transaction  7506
    Oldest active       7544
    Oldest snapshot     7544
    Next transaction    7549
    Bumped transaction  1
    Sequence number     0
    Next attachment ID  5
    Implementation ID   16
    Shadow count        0
    Page buffers        0
    Next header page    0
    Database dialect    1
    Attributes      force write

    Variable header data:
    Sweep interval:     20000
    *END*

总结一下:

  • 获取 Firebird 的副本
  • 从 bin 目录运行 gstat.exe -h
  • 从输出中获取 ODS 版本
  • table here 中查找

【问题讨论】:

  • 您能否详细说明您遇到的错误?另外,您使用哪个数据库引擎连接到数据库?您是否使用方言 1 连接到它?
  • ODS对应Interbase 5.5或5.6。
  • 澄清一下,它不可能是 Firebird 1.0 或 1.5(两者的“次要版本”都是 9.1)
  • @GuillemVicens 我正在连接 Firebird2.5 isql.exe。当我尝试与 FlameRobin 连接时,我得到“不支持的服务器:错误的 ODS 版本 (9),至少需要 '10'”
  • @EMBarbosa 我添加了 Delphi 标签,因为我知道 Firebird 主要在 Delphi 社区中使用,并且我认为如果我添加 Delphi 标签,我将有更好的机会获得答案。现在我有了答案,我将删除标签。

标签: firebird interbase


【解决方案1】:
  1. About ODS and how to get it
  2. Firebird, Interbase versions and corresponding ODS。它是俄语的,但您可以阅读表格。它有列 - 版本、主要 ODS 版本、支持的 ODS 版本。

【讨论】:

  • 我已经运行 gstat.exe 并将输出添加到原始问题中。那么根据俄罗斯的表,肯定是Interbase 5.5或5.6中创建的吧?是否有可能在 Firebird 1.0 中创建的数据库的 ODS 为 9.1 或始终为 10.0?
  • Firebird 1.0 将始终使用 ODS 10.0 创建数据库
  • 太糟糕了,FB3 选择使用 IB 2007 也使用的 ODS 12.0。destructor.de/firebird/3.0
【解决方案2】:

从我的 cmets 关于所用方言的回答来看,我猜 FlameRobin 在连接到数据库时正在使用方言 3,这是新数据库的默认方言阅读Dialect 以获取有关此问题的更多信息。另一方面,Dialect 1 是旧数据库(早于 IB 6.0)的默认设置。

在 iSQL 中,您可以使用以下句子来确保您使用的是 Dialect 1。当您启动 iSQL 时:

isql -sql_dialect n

或在 iSQL 会话中:

SET SQL DIALECT n;

更多关于 iSQL 和方言的信息here

如果这不起作用,那么最好的办法是安装一些旧的 Interbase 5.0,执行 gbak 并使用 Firebird 2.5 安装恢复数据库。

您也可以尝试在Firebird mailing lists 上提问。其中有一个专注于 Interbase 数据库转换。

编辑:正如@mghie 所说,FlameRobin 的问题可能是因为它不支持 10 之前的 ODS。

HTH

【讨论】:

  • SQL 方言由 isc_database_info() 函数调用返回。如果是 1 或 3,FlameRobin 将使用该方言。但它不支持低于 10 的 ODS 版本。
  • @mghie,感谢您提供的信息。我不使用 FlameRobin,所以我不确定它是否会使用数据库的方言或默认方言。
【解决方案3】:

您可以使用FBConvert 实用程序将数据库转换为最新的 Firebird 2.5 格式。

【讨论】:

    猜你喜欢
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2021-05-14
    相关资源
    最近更新 更多