文章来自:iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)
[FGL] 可链接数据库的种类与联机方法
既然是从 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联机成功。
转载请注明:赫非域 » [day4]FGL可链接数据库的种类与联机方法