我目前使用CLI方法注册一个节点,然后使用该节点的数据库(带有CATALOG NODE / CATALOG DATABASE)来注册我的DB2 CLI客户端以访问我们的数据库服务器。
通过一次数据库注册,我可以有效地注册默认数据库,但是当我使用SQLDriverConnect在应用程序中连接并使用“ DATABASE =“选项时,我可以连接到服务器上可用的其他数据库。
我想切换到更容易管理的db2dsdriver.cfg
配置文件,但是我无法对其进行配置以允许一个人访问多个数据库。
一些代码有助于阐明。我的DB2服务器实例具有两个定义如下的数据库:
CREATE DATABASE DB_1 ON /opt/data/DB_1 USING CODESET UTF-8 TERRITORY US COLLATE USING SYSTEM
CREATE DATABASE DB_2 ON /opt/data/DB_2 USING CODESET UTF-8 TERRITORY US COLLATE USING SYSTEM
我使用以下命令在客户端CLI中注册此服务器:
CATALOG TCPIP NODE DB_NODE remote example.server.com server 50000
CATALOG DB DB_1 as DB_1 at node DB_NODE
通过该设置,我可以从CLI应用程序中执行以下操作:
rc = SQLDriverConnect(hdbc, NULL, "DSN=DB_1;UID=dbtest1;PWD=zebco5;DATABASE=DB_1",
SQL_NTS, outStr, 128, &outSize, SQL_DRIVER_NOPROMPT);
或者如果我想使用DB_2数据库:
rc = SQLDriverConnect(hdbc, NULL, "DSN=DB_1;UID=dbtest1;PWD=zebco5;DATABASE=DB_2",
SQL_NTS, outStr, 128, &outSize, SQL_DRIVER_NOPROMPT);
请注意,我不需要更改DSN,只需更改“数据库”连接选项即可。
最近,我找到了我想使用的db2dsdriver.cfg
配置文件。为此,我创建了这个文件,并从cli中取消了目录和数据库的目录:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<configuration>
<dsncollection>
<dsn alias="DB_1" name="DB_1" host="server.example.com" port="50000"/>
</dsncollection>
<databases>
<database name="DB_1" host="server.example.com" port="50000"/>
<database name="DB_2" host="server.example.com" port="50000"/>
</databases>
</configuration>
我可以与此联系
rc = SQLDriverConnect(hdbc, NULL, "DSN=DB_1;UID=dbtest1;PWD=zebco5;DATABASE=DB_1",
SQL_NTS, outStr, 128, &outSize, SQL_DRIVER_NOPROMPT);
很好,但是现在使用它来连接到DB_2:
rc = SQLDriverConnect(hdbc, NULL, "DSN=DB_1;UID=dbtest1;PWD=zebco5;DATABASE=DB_2",
SQL_NTS, outStr, 128, &outSize, SQL_DRIVER_NOPROMPT);
导致此错误:
SQL0843N The server name does not specify an existing connection. SQLSTATE=08003
我了解,但似乎是旧节点/数据库注册机制的功能退化。
我正在尝试确定配置文件是否支持我正在使用的功能,而我做错了什么,或者只是这样行不通?
谢谢您的帮助。