如何轻松确定.fdb-file(Firebird数据库)的版本 [英] How to easily determine version of .fdb-file (Firebird database)

查看:39
本文介绍了如何轻松确定.fdb-file(Firebird数据库)的版本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

查看专有软件(可能使用Firebird Embedded)的.fdb数据库时,如何确定需要安装哪个版本的Firebird?

我目前能想象的唯一方法是用十六进制查看器查看‘ods-Version’,它是页眉的一部分,它很可能也用作文件头的格式,然后通过挖掘存储库历史记录,以某种方式找出哪个Firebird版本支持哪个ods-版本。至少目前,ods版本的编码方式如下所述。

相关单据:https://firebirdsql.org/file/documentation/reference_manuals/reference_material/Firebird-Internals.pdf

相关编码:

https://github.com/FirebirdSQL/firebird/blob/3dd6a2f5366e0ae3d0e6793ef3da02f0fd05823a/src/jrd/ods.h

inline USHORT DECODE_ODS_MAJOR(USHORT ods_version)
{
    return ((ods_version & 0x7FF0) >> 4);
}

inline USHORT DECODE_ODS_MINOR(USHORT ods_version)
{
    return (ods_version & 0x000F);
}

真的没有更简单的方法来确定所需的Firebird版本吗,例如使用一些cli-Tool?

推荐答案

如果您手头上安装了FireBird,则可以使用gstat检查数据库的ods。例如:

gstat -h <path-to-your-database>

如果gstat版本支持数据库的ods版本,您将得到如下内容:

Database "D:DATADBFB4FB4TESTDATABASE.FDB"
Gstat execution time Sat Mar 17 18:08:09 2018

Database header page information:
        Flags                   0
        Generation              308
        System Change Number    0
        Page size               16384
        ODS version             13.0
        Oldest transaction      393
        Oldest active           394
        Oldest snapshot         394
        Next transaction        395
        Sequence number         0
        Next attachment ID      150
        Implementation          HW=AMD/Intel/x64 little-endian OS=Windows CC=MSVC
        Shadow count            0
        Page buffers            0
        Next header page        0
        Database dialect        3
        Creation date           Jan 6, 2017 14:05:48
        Attributes              force write

    Variable header data:
        *END*

此处ODS version 13.0表示它是Firebird 4数据库。

如果gstat版本不支持数据库的ods版本,您将收到如下错误消息(例如,在本例中使用Firebird 2.5/ods 11.2数据库上的Firebird 4 gstat):

Wrong ODS version, expected 13, encountered 11

这有它的缺点:它不提供ods次要版本,例如,当使用Firebird 2.0(ods 11.0)或2.1(ods 11.1)gstat访问Firebird 2.5(ods 11.2)数据库时,这将导致无用的错误消息:

Wrong ODS version, expected 11, encountered 11

最快的方法是使用Firebird 2.5 gstat,因为这将允许您准确地确定10(Firebird 1)和11.2(Firebird 2.5)之间的准确的ods版本,同时错误消息将允许您准确地确定您是否需要更新的版本(例如,ods 12是Firebird 3,ods 13是Firebird 4)。

但是,您还需要查看gstat的Implementation输出。Firebird数据库文件具有特定于平台的存储(尽管从Firebird 2.0开始已减少了该存储空间)。例如,在Firebird 1.5及更早版本(ODS10)中,64位Firebird无法访问来自32位Firebird的数据库。来自小端平台(最常见)的Firebird数据库无法在大端平台上读取(反之亦然)。

在这些限制范围内,Firebird 2.5安装可以读取ODS10到11.2的数据库。Firebird 3只能读取ods%12,而Firebird 4只能读取ods%13。

如果存在平台不匹配(例如旧的32/64位或小端/大端)或不支持的ODS版本,您将需要使用可传输备份(Gbak)进行转换和/或升级。

有关ods版本和随附的Firebird(或InterBase)版本的概述,请参阅All Firebird and InterBase On-Disk-Structure (ODS) versions

这篇关于如何轻松确定.fdb-file(Firebird数据库)的版本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆