首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从远程Db2实例连接到IBMDb2 Event Store实例?

问如何从远程Db2实例连接到IBMDb2 Event Store实例?
EN

Stack Overflow用户
提问于 2019-08-02 00:16:00
回答 1查看 430关注 0票数 1

我有一个Db2实例,我正在尝试将它连接到一个远程IBM Db2 Event Store集群。我已经能够连接Db2 CLP客户端,是否可以让Db2实例也看到Db2事件存储集群中的表,就像它们是本地表一样?

我使用的容器已经包含最新的Db2 11.5实例,并且可以直接从docker hub下载。通过这个容器,我能够按照以下步骤配置Db2客户机来远程访问IBM Db2 Event Store实例,这样我就知道我已经连接好了。

首先,我使用db2实例启动容器

代码语言:javascript
复制
$ docker run -itd --name db2 -e DBNAME=testdb -v ~/:/database -e DB2INST1_PASSWORD=GD1OJfLGG64HV2dtwK -e LICENSE=accept -p 50000:50000 --privileged=true ibmcom/db2

进入容器

代码语言:javascript
复制
$ docker exec -it  db2 bash -c "su - db2inst1"

跟随documentation for Configuring Secure Sockets Layer (SSL) support in non-Java Db2 clients

为此,I downloaded the GsKit package within the container and installed it和使用GSKCapiCmd工具创建了一个密钥数据库

代码语言:javascript
复制
[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

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

代码语言:javascript
复制
# 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)

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

代码语言:javascript
复制
[db2inst1@a33d5b29ffa2 ~]$ gsk8capicmd_64 -cert -add -db "mydbclient.kdb" -pw "myClientPassw0rdpw0"  -label "server" -file "server-certificate.cert" -format ascii -fips

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

代码语言:javascript
复制
[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

然后,我按照文档找到了catalog a remote TCPIP node using SECURITY SSL,因为Db2事件存储企业版在默认情况下配置了SSL:

代码语言:javascript
复制
[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.

最后,我按照文档找到了catalog the database using AUTHENTICATION GSSPLUGIN,这是Db2事件存储所需要的:

代码语言:javascript
复制
[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.

通过我做的所有设置,我能够建立一个connection using the user and the password to validate the configuration。

代码语言:javascript
复制
[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事件存储库表。这是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2019-10-10 12:05:10

是啊!实际上你们已经很接近了。

假设您已连接到Db2事件存储数据库,则可以运行:

db2 list tables for all

或者对于给定的模式:

db2 list tables for schema <>

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

db2 create db testdb

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

代码语言:javascript
复制
> db2 connect to testdb
> db2 list tables for all

这里的关键是你的活动连接。当连接到远程Db2事件存储数据库时,db2 list tables ...命令将显示远程数据库的表,而当连接到本地数据库时,db2 list tables ...命令将显示本地数据库的表。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57313177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档