什麼是 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 文件