如何从远程DB2实例连接到IBM DB2事件商店实例



我有一个db2实例,我正在尝试将其连接到远程IBM DB2事件存储群集。我已经可以连接DB2 CLP客户端,是否可以让DB2实例查看DB2事件商店群集中的表格,就像它们是本地表格一样吗?

我正在使用一个已经包含最新DB2 11.5实例的容器,并且可以直接从Docker Hub下载。使用此容器,我能够配置DB2客户端以远程访问IBM DB2 Event Store实例之后,因此我知道我有连接。

首先,我使用DB2实例

启动了容器
$ docker run -itd --name db2 -e DBNAME=testdb -v ~/:/database -e DB2INST1_PASSWORD=GD1OJfLGG64HV2dtwK -e LICENSE=accept -p 50000:50000 --privileged=true ibmcom/db2

输入容器

$ docker exec -it  db2 bash -c "su - db2inst1"

遵循在非Java DB2客户端配置安全套接字层(SSL(支持的文档

为此,我在容器中下载了GSKIT软件包,并安装了它,并使用GSKCAPICMD工具创建了一个密钥数据库

[db2inst1@a33d5b29ffa2 ~]$ mkdir /database/config/db2inst1/sqllib/security/keystore
[db2inst1@a33d5b29ffa2 ~]$ cd /database/config/db2inst1/sqllib/security/keystore
[db2inst1@a33d5b29ffa2 ~]$ gsk8capicmd_64 -keydb -create -db "mydbclient.kdb" -pw "myClientPassw0rdpw0" -stash

然后从服务器复制默认的自签名证书

# kubectl get pods -n dsx | grep eventstore-tenant-engine | head -1
eventstore-tenant-engine-565d74cfd8-64jv4         1/1       Running     0          21h
# kubectl exec -n dsx eventstore-tenant-engine-565d74cfd8-64jv4 -- cat /eventstorefs/eventstore/db2inst1/sqllib_shared/gskit/certs/eventstore_ascii.cert

(如果您无法访问服务器,也可以使用REST API(

这样,我在客户端上使用它创建了一个服务器certificate.cert文件,然后将证书添加到我创建之前的客户端密钥数据库中:

[db2inst1@a33d5b29ffa2 ~]$ gsk8capicmd_64 -cert -add -db "mydbclient.kdb" -pw "myClientPassw0rdpw0"  -label "server" -file "server-certificate.cert" -format ascii -fips

最后更新了客户端上的配置以使用我刚刚设置的客户端密钥数据库:

[db2inst1@a33d5b29ffa2 ~]$ db2 update dbm cfg using 
      SSL_CLNT_KEYDB /database/config/db2inst1/sqllib/security/keystore/clientkey.kdb 
      SSL_CLNT_STASH /database/config/db2inst1/sqllib/security/keystore/clientstore.sth

然后,我遵循文档使用安全性SSL对远程TCPIP节点进行分类,因为DB2 Event Store Enterprise Edition的SSL默认配置为:

[db2inst1@a33d5b29ffa2 ~]$ db2 catalog tcpip node nova remote 172.16.197.11 server 18730 SECURITY SSL
DB20000I  The CATALOG TCPIP NODE command completed successfully.
DB21056W  Directory changes may not be effective until the directory cache is
refreshed.

最后,我遵循文档,使用身份验证GSSPlugin对数据库进行分类,这是DB2事件商店所需的内容:

[db2inst1@a33d5b29ffa2 ~]$ db2 CATALOG DATABASE eventdb AT NODE  nova AUTHENTICATION GSSPLUGIN
DB20000I  The CATALOG DATABASE command completed successfully.
DB21056W  Directory changes may not be effective until the directory cache is
refreshed.

在我完成的所有设置后,我能够使用用户和密码建立一个连接来验证配置。

[db2inst1@a33d5b29ffa2 ~]$ db2 CONNECT TO eventdb USER admin USING password
   Database Connection Information
 Database server        = DB2/LINUXX8664 11.1.9.0
 SQL authorization ID   = ADMIN
 Local database alias   = EVENTDB

现在,我想进一步迈出一步,并能够让DB2实例查看本地表和远程DB2事件存储表。这可能吗?

是的!您实际上很近。

鉴于您已连接到DB2事件商店数据库,您可以运行:

db2 list tables for all

或给定模式:

db2 list tables for schema <>

现在,由于您使用的是Db2 11.5 Docker容器,因此您还可以在容器内创建一个数据库。例如:

db2 create db testdb

之后,您可以将其连接到容器本地数据库并列出您的"本地"表。例如:

> db2 connect to testdb
> db2 list tables for all

这里的关键是您的主动连接。当它是在您的远程DB2 Event Store数据库中进行的,db2 list tables ...命令将显示远程数据库的表,并且当在本地数据库上建立连接时,db2 list tables ...命令将显示本地数据库的表。

最新更新