在DB2 db2dsdriver.cfg文件中定义一个数据库条目,该条目可以访问多个数据库

时间:2018-07-28 21:35:16

标签: db2 db2-luw

我目前使用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

我了解,但似乎是旧节点/数据库注册机制的功能退化。

我正在尝试确定配置文件是否支持我正在使用的功能,而我做错了什么,或者只是这样行不通?

谢谢您的帮助。

0 个答案:

没有答案