首页 > 解决方案 > 在 DB2 db2dsdriver.cfg 文件中定义一个可以访问多个数据库的数据库条目

问题描述

我目前使用 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,只需更改“DATABASE”连接选项。

最近我找到了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

我理解,但似乎是旧节点/数据库注册机制的功能回归。

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

谢谢您的帮助。

标签: db2db2-luw

解决方案


推荐阅读