DB2联邦查询访问KingbaseES
DB2 11.5提供了odbc库来对pg/oracle等数据库进行联邦查询,对于KingbaseES数据库也是如此。
关键字:
KingbaseES、异构数据库、DB2、联邦查询
版本说明
KES:V8R6,端口5033,数据库模式oracle,不区分大小写
注:可在initdb的时候添加参数–enable-ci来创建一个不区分大小写的数据库,数据库创建完毕后,可输入以下命令查询:
show enable_ci;
如下图所示:
enable_ci = on -> 表示数据库不区分大小写
DB2:V11.5,linux开发者版本
联邦查询
DB2针对联邦查询,提供了一套ODBC库,该库用于配置ODBC数据源对远程数据库的访问,可支持PG/ORACLE等数据库。
由于KES兼容PG的通信协议,所以可以使用DB2提供的pg相关的odbc驱动来连接KingbaseES,完成远程数据库的查询。
检查"/opt/ibm/db2/V11.5/federation/odbc/lib/"路径是否有对应odbc驱动,若没有,则需要安装db2客户端来获取对应odbc库。
db2 安装路径
DB2 实例安装路径: /home/db2inst1
DB2 odbc库路径: /opt/ibm/db2/V11.5/federation/odbc/lib
安装DB2客户端
1>切换到安装包解压路径下:
cd /xxx/server_dev
2>执行客户端安装:
./db2_install
安装可能会报错,但只要"/opt/ibm/db2/V11.5/federation/odbc/lib/"有对应odbc库就行,如下图所示:
后面的操作需要切换到db2inst1用户下操作。
db2 联邦配置项开启
1查看federated的配置项:
db2 get dbm cfg | grep -i federated
2更新federated为yes:
db2 update dbm cfg using federated yes
设置完成后,再次查询如下图所示:
3重启数据库:
db2stop force
db2start
db2 联邦查询配置
1 db2 连接到上文创建的数据库:
db2 connect to testDB2
2 进入db2命令行:
db2
3 创建SERVER:
【注意】
因DB2提供了pg的odbc驱动来进行联邦查询,所以可直接使用db2预置的wrapper来创建远程服务器的server,即创建远端服务器server的时候可不用创建并指定wrapper。
使用DSN:
- 修改db2dj.ini(该配置文件存放在实例目录下):
打开db2dj.ini:
vi /home/db2inst1/sqllib/cfg/db2dj.ini
添加odbc.ini的文件路径(该配置文件需要自己提供,可将下文的模板拷贝到指定目录):
ODBCINI=/home/db2inst1/odbc.ini
修改后文件如下图所示:
2)修改odbc.ini
odbc.ini 添加 [Kingbase_V8] 节点:
[Kingbase_V8]
Driver = /opt/ibm/db2/V11.5/federation/odbc/lib/FOpsql27.so # 驱动路径
HostName = 10.10.12.252 # 远端数据库IP
PortNumber = 5033 # 端口
Database = test # 数据库名
EnableDescribeParam = 1 # linux for system z 系统需启动该配置项
odbc.ini 需要自己提供,以下是已配置好[Kingbase_V8]的odbc.ini的模板:
【注意】
各行不能有空格等额外的字符,否则会出现无法识别的情况,上文文本框各行后的空格及字符只是注释说明,使用时需要删除。
3)创建远程服务器的server并映射到本地
(1)注册ODBC数据库源的server:
create server serverKES type postgresql options(node ‘Kingbase_V8’);
(2)创建远程到ODBC数据源的用户映射:
create user mapping for user server serverKES options (REMOTE_AUTHID ‘system’, REMOTE_PASSWORD ‘123456’);
不使用DSN:
1)创建远程服务器的server并映射到本地
(1)注册ODBC数据库源的server:
create server serverKES_NoDSN type postgresql options(host ‘10.10.12.252’, port ‘5033’, dbname ‘test’);
(2)创建远程到ODBC数据源的用户映射:
create user mapping for user server serverKES_NoDSN options (REMOTE_AUTHID ‘system’, REMOTE_PASSWORD ‘123456’);
【注意】
使用时需注意符号的全角半角。
连接测试
1.打开传递会话的数据源:
set passthru serverKES;
2.新建查询测试:
select * from tab;
3.关闭当前会话:
set passthru reset
如下图所示:
注:
SET PASSTHRU -> 可将当前配置的ODBC数据源的SQL提交到该数据源的会话,开启后,只会去查询建立连接的远端数据库。
以下是db2和kes同名数据库开启SET PASSTHRU的测试,如下图所示:
由上图所示,开启后可以直接去远端KingbaseES数据库查询tab表。