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

在DB2 db2dsdriver.cfg文件中定义一个可以访问多个数据库的数据库条目,db2,db2-luw,Db2,Db2 Luw,我目前使用CLI方法,先注册一个节点,然后注册该节点的数据库(使用CATALOG节点/CATALOG数据库)来配置DB2 CLI客户端以访问我们的数据库服务器 通过一次数据库注册,我可以有效地注册默认数据库,但当我使用SQLDriverConnect在应用程序中连接并使用“database=”选项时,我可以连接到服务器上可用的其他数据库 我想切换到更易于管理的db2dsdriver.cfg配置文件,但是我无法将其配置为允许单个数据库访问多个数据库 一些代码有助于澄清。我的DB2服务器实例有两个定

我目前使用CLI方法,先注册一个节点,然后注册该节点的数据库(使用CATALOG节点/CATALOG数据库)来配置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>
很好,但现在使用此连接到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
我理解这一点,但这似乎是旧的node/db注册机制在功能上的倒退

我正在尝试确定配置文件是否支持我所使用的功能,我是否做了一些错误的事情,或者它是否不能以这种方式工作


谢谢您的帮助。

您所说的“一个数据库访问多个数据库”是什么意思?你说的“不能”是什么意思?您当前的配置文件是什么样子的?你有什么错误?我已经更新了我的问题来澄清。谢谢。哪个版本(即哪个db2level)的Db2客户机变量允许数据库属性覆盖SQLDriverConnect连接字符串中的DSN属性?对于Windows上的v11.1 Db2客户机,SQLDriverConnection忽略DATABASE=值并仅连接到指定的DSN。当DSN=DB_1时,您是否非常确定连接真的是到DB_2的?您是正确的,在允许连接时,我没有发现连接设置
DATABASE=
实际上没有将我的登录切换到DB_2。我需要去重新阅读一下文件。谢谢
SQL0843N  The server name does not specify an existing connection.  SQLSTATE=08003