https://ithelp.ithome.com.tw/m/articles/10259775
既然是從 INFORMIX 剝離出來的工具,應該連結資料庫的能力是強大的。本段落我們檢視一下Genero連結資料庫的能力。
市面上常用的資料庫,都有自己努力的強項,個別的指令也稍微有些不同。為了最大化能共通於這些資料庫,以做到『Write Once, Use
Everywhere』,Genero FGL具有自開發的『共通性資料庫介面 ODI, Open Database Interface』,以
INFORMIX 指令為基準 (因為來自於 INFOMIX ),將其他資料庫具有的些微差異,利用 ODI 進行轉譯,概略流程如下:
透過 ODI 的轉換,資料庫內包含數據型態、SQL語法、指令等,能在最大限度下求同,但仍舊保持了使用 PREPARE 方法,使得特殊指令仍在 Genero內能被使用,滿足『優化』的需求,此為存異。
FGLPROFILE
FGL套件的設定檔案是 FGLPROFILE,在這裡可以指定許多必要的設定,今天專門針對『資料庫的連線』進行說明。
FGLPORIFLE採用 entry 的方式設定 (非INI模式),行首 # 字號時代表為註解
- dbi.default.driver = "" #預設連結的 db 種類驅動程式,安裝時有詢問就會補上
此設定可以參考 $FGLDIR/dbdrivers 路徑下設定,若為 ORACLE 則通常為 dbmora (注意部分Genero須帶版號) - dbi.database..X #指定資料庫連線字串, 可隨產品需求自行定義,X 則是設定帳號密碼等訊息,不同資料庫列出差異於下方
Genero各版本可對接的數據庫
Genero可對接 IBM DB2 / INFORMIX / MS SQL Server / ORACLE / MySQL / PostgreSQL / SAP Hana / SQLite / Sybase ASE (以上按照名稱排序),但是支持版本各有不同,以下挑選部分資料庫作為簡介對象
資料庫廠牌 | Genero 2.40 | Genero 2.50 | Genero 3.20 |
---|---|---|---|
ORACLE | 8.x / 9.x / 10.x / 11.x | 9.2 / 10.x / 11.x / 12x | 11.x 以上全版本 |
INFORMIX | 5.x / 7.x / 8.x / 9.x / 10.x / 11.x | 5.x / 7.x / 8.x / 9.x / 10.x / 11.x | 5.x以上全版本 |
MS SQL Server | 2005 / 2008 / 2012 | 2005 / 2008 / 2012 | 2012以上全版本,Azure SQDBL V12 |
PostgreSQL | 8.x.y / 9.x.y | 8.x.y / 9.x.y | 9.6 / 10 / 11 / 12 |
SQLite | 3.5.x / 3.6.x | 3.5.x / 3.6.x | 3.x |
Genero端連線方法
連線到資料庫時,最重要的就是連線字串的設定。包含連結的資料庫主機位置 (port) 、登入資料庫的帳號密碼,以及對應需使用的字元組等環境變數。
^ 例如 ORACLE 資料庫會將相關訊息以 ORACLE_SID 含括成為一組設定時,則須依照該資料庫要求進行設定。
使用靜態的 FGLPROFILE 設定
Genero支持靜態的設定檔,即透過 FGLPROFILE 進行連線字串的設定。FGLPROFILE的存放有兩組路徑:$FGLDIR/etc/fglprofile 與 $FGLPROFILE 指定檔案,遇有同樣的設定時,後者可壓過前者;同檔案內衝突時,下方設定壓過上方設定
使用動態的 CONNECT 指令設定
若需要連結的資料庫眾多,或是需要動態設定,則可以在程式內部使用 CONNECT 指令
語法
『CONNECT TO連線對象+ODI驅動程式名稱 USER 連線帳號 USING 連線密碼』
註:連線對象依照不同資料庫有不同需求。部分資料庫如SQLite無帳號密碼則可省略
以下將以 Genero 3.20 為例說明個別資料庫連線注意事項
本文摘錄需特別關注要點進行說明與介紹,需大量採用或作為生產環境時,仍應詳讀FGL的ODI文件,該文件內均會詳列連線時,DB的特殊之處、須採用的特殊語法、如何將原有程式或查詢語句進行轉換為 ODI 通用語句。
ORACLE
連線前
需在 Genero 所在主機安裝完成對應的 ORACLE Client 軟件,並配置 tnsname.ora,確認ORACLE_SID / ORACLE_HOME 等必須存在的環境變數時,可進行 Genero 端設定
FGLPROFILE設定
dbi.database.dbname.driver = "dbmora"
dbi.database.dbname.source = "stock"
dbi.database.dbname.username= "登入帳號"
dbi.database.dbname.password= "登入密碼"
dbi.database.dbname.schema= "登入SCHEMA"
INFORMIX
連線前
驅動程式配置完成後,需確認 INFORMIXSERVER 環境變數是否已完成配置
因為源自於 INFORMIX,所以在 FGLPROFILE 中指定驅動程式即可
PostgreSQL
連線前
需安裝好client,且必須完成下列環境變數的設定
- PGHOST PostgerSQL資料庫所在IP/Domain
- PGPORT PostgreSQL資料庫需要通信埠 (預設為5431可在db端新增額外區或調整)
- PGDATABASE 預期要使用的database
- PGHOME 若DB與Genero裝在同一台時,指向PostgreSQL安裝路徑用的
- PGLOCALDIR 若DB與Genero裝在同一台時,指向語系檔用的
- PGDATA 若DB與Genero裝在同一台時,指向data file存放路徑
FGLPROFILE設定
dbi.database.dbname.driver = "dbmpgs"
dbi.database.dbname.source = "test1" #或用dbname[@host[:port]]
dbi.database.dbname.username= "登入帳號"
dbi.database.dbname.password= "登入密碼"
MS SQL Server
連線前
SQL Server在2.40與更早前的版本,有支持 open source的FREETDS與Easysoft 的連線,此兩種連線需透過
OPEN ODBC的協助。設定上較為繁雜且軟件為社群維護,可能會有維護窗口的顧慮。可考慮直接使用微軟推出的 Linux 版本SQL
Server驅動 SNC (SQLserver Native Client) 。
依據 Genero 官網要求,SQL Server連線前應先確定 Linux 上是否已完成對應驅動程式安裝的最低版本要求如下
FGLPROFILE設定
dbi.database.dbname.driver = "dbmsnc"
dbi.database.dbname.source = "test1"
dbi.database.dbname.username= "登入帳號"
dbi.database.dbname.password= "登入密碼"
SQLite
連線前
單機文件型資料庫,只需確認套件已安裝即可
FGLPROFILE設定
dbi.database.dbname.driver = "dbmsqt"
dbi.database.dbname.source = "/opt/myapp/stock.dbs"
若完成FGLPROFILE的設定後,即可令程式進行連線
要驗證連線時,可先利用 DATABASE 指令進行連線,依據上方的FGLPROFILE設定,以『dbname』為範例,測試連線如下
MAIN
DEFINE cnt INTEGER
DATABASE dbname
SELECT COUNT(1) INTO cnt FROM hello_table
IF cnt > 0 THEN
DISPLAY “CONNECT OK!”
END IF
END MAIN
即可確認 DB連線成功。
沒有留言:
張貼留言