本文回答以下幾個關於 Informix 15 的問題:

  • 為何現在有兩個 Informix 資料庫驅動程式?
  • 搭配 Informix 15 應使用哪個驅動程式?
  • 使用 Informix 15 時,Genero 有哪些差異?
  • 錯誤碼 -21569 是什麼意思?

Genero 連接資料庫的方式

Genero 與資料庫的連線路徑為:

fglrun(Genero 應用程式)
  ↕
FGLDIR/dbdrivers/ 下的驅動程式檔案
  ↕
資料庫客戶端(Client SDK)
  ↕
資料庫伺服器

資料庫驅動程式是存放在 FGLDIR/dbdrivers 目錄中的共享函式庫(.dll、.so、.dylib),命名規則為 dbm???_*(含版本號)或 dbm???(目前版本的符號連結)。

傳統 Informix 連線方式

在 Genero 多個版本中,標準設定為:

fglrun (4.01, 5.01) → dbmifx_9 → Informix CSDK 4.10–4.50 → IDS 12–14

dbmdefault 通常指向 dbmifx_9,開發人員幾乎不需要在意驅動程式的設定。

Informix 15 帶來的變化

Informix 15 引入了結構性變更,需要新的資料庫驅動程式 dbmifx_15。在 Genero 6.00 中,現在有兩個驅動程式選項:

連接 IDS 12–14:

fglrun (6.00) → dbmifx_9 → Informix CSDK 4.10–4.50 → IDS 12–14

連接 IDS 15:

fglrun (6.00) → dbmifx_15 → Informix CSDK 15 → IDS 15

相容性模式允許舊版 CSDK 連接 Informix 15,但無法使用新功能。

關鍵技術變更:列定址從 4 bytes 改為 8 bytes

Informix 15 最重要的技術變更是:列識別(Row Addressing)從 4 bytes 整數改為 8 bytes 整數

這個變更影響到:

  • ROWID 欄位
  • sqlca.sqlerrd[6] 變數

程式碼中使用這些變數的地方,需要從 INTEGER 改為 BIGINT 資料型別。

升級至 Informix 15 的設定步驟

  1. 檢查 fglprofile 中 dbi.database._dbname_.driver 的值(間接指定驅動程式)
  2. 檢查連線字串中 driver= 的設定(直接指定驅動程式)
  3. 確認 Genero 安裝時選擇了正確的預設資料庫驅動程式
  4. 從 Genero 5 升級到 6 時,重新編譯 Genero 原始碼
  5. 檢查程式碼中所有使用 sqlca.sqlerrd 的地方,確認是否需要改為 BIGINT

錯誤 -21569 的解決方式

若出現錯誤訊息「This client cannot create or open tables that use large rowids」(此客戶端無法建立或開啟使用大型列 ID 的資料表),通常表示設定不符——例如 Informix 15 使用了大型資料表(Large Tables),但連線使用的是舊版 CSDK。

解決方式:確認使用 Informix CSDK 15 搭配 dbmifx_15 驅動程式。

關於 SMALL TABLE 與 LARGE TABLE

Informix 區分 SMALL TABLE 和 LARGE TABLE 模式,這與 TABLE_SIZE 設定參數有關。只有 LARGE TABLE 才會使用新的 8 bytes 列定址方式。開發人員應了解自己的資料表屬於哪種模式,以判斷是否需要調整程式碼。

原文:https://4js.com/ask-reuben/ig-314/  ·  有任何 Genero 技術問題或翻譯疑問,歡迎來信 support@t100.app