本文回答以下幾個關於 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 的設定步驟
- 檢查 fglprofile 中
dbi.database._dbname_.driver的值(間接指定驅動程式) - 檢查連線字串中
driver=的設定(直接指定驅動程式) - 確認 Genero 安裝時選擇了正確的預設資料庫驅動程式
- 從 Genero 5 升級到 6 時,重新編譯 Genero 原始碼
- 檢查程式碼中所有使用
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 列定址方式。開發人員應了解自己的資料表屬於哪種模式,以判斷是否需要調整程式碼。