DB2 连接到没有目录的远程数据库?
DB2 connect to remote DB without catalog?
我正在尝试连接到 DB2 LUW。我知道如果我编目 tcpip 节点和数据库,我将能够连接到数据库。示例:
db2 catalog tcpip node mynode remote 20.40.20.40 server 5555
db2 catalog database mydb as mydb at node mynode
db2 terminate
db2 connect to mydb user myuser using mypassword
但是,如果我可能需要连接到各种数据库,这是否意味着我 必须 每次涉及新数据库时都要进行目录处理?或者有没有办法连接它?我确实从 IBM 知识库中找到了 this 篇文章,但它是针对 DB2 z/OS 的。目前,如果我尝试以下语法:
db2 connect to 20.40.20.40:5555/mydb user myuser using mypassword
我收到一个错误:
SQL0104N An unexpected token "20.40.20.40:5555/mydb" was found following "TO". Expected tokens may include: "<database-alias>". SQLSTATE=42601
您可以这样做 with CLPPlus,它是用 Java 编写的,因此使用 JDBC 驱动程序:
clpplus myuser@20.40.20.40:5555/mydb
但与传统的 CLP 不同。
您可以使用 IBM data server driver configuration file,您可以在其中指定数据库而不对其进行编目。有关于格式和如何操作的详细描述。
可以使用一个简单的包装器来解析传递的 "URL" 并动态生成这样的配置文件。
我们必须在 dot space filename
模式下调用它。
#!/bin/sh
if [ $# -eq 0 ]; then
echo "Usage: . ./db2connect host:port/dbname USER username [USING password]" >&2
exit 1
fi
DSN=
CFGFILE=./db2dsdriver.cfg.$$
dbname=${DSN#*/}
hp=${DSN%/*}
host=${hp%:*}
port=${hp#*:}
cat > ${CFGFILE} <<EOF
<configuration>
<dsncollection>
<dsn alias="${dbname}" name="${dbname}" host="${host}" port="${port}"/>
</dsncollection>
<databases>
<database name="${dbname}" host="${host}" port="${port}"/>
</databases>
</configuration>
EOF
cfg_bkp=${DB2DSDRIVER_CFG_PATH}
export DB2DSDRIVER_CFG_PATH=${CFGFILE}
shift
db2 connect to ${dbname} "$@"
export DB2DSDRIVER_CFG_PATH=${cfg_bkp}
rm -f ${CFGFILE}
对你有用吗?
我正在尝试连接到 DB2 LUW。我知道如果我编目 tcpip 节点和数据库,我将能够连接到数据库。示例:
db2 catalog tcpip node mynode remote 20.40.20.40 server 5555
db2 catalog database mydb as mydb at node mynode
db2 terminate
db2 connect to mydb user myuser using mypassword
但是,如果我可能需要连接到各种数据库,这是否意味着我 必须 每次涉及新数据库时都要进行目录处理?或者有没有办法连接它?我确实从 IBM 知识库中找到了 this 篇文章,但它是针对 DB2 z/OS 的。目前,如果我尝试以下语法:
db2 connect to 20.40.20.40:5555/mydb user myuser using mypassword
我收到一个错误:
SQL0104N An unexpected token "20.40.20.40:5555/mydb" was found following "TO". Expected tokens may include: "<database-alias>". SQLSTATE=42601
您可以这样做 with CLPPlus,它是用 Java 编写的,因此使用 JDBC 驱动程序:
clpplus myuser@20.40.20.40:5555/mydb
但与传统的 CLP 不同。
您可以使用 IBM data server driver configuration file,您可以在其中指定数据库而不对其进行编目。有关于格式和如何操作的详细描述。
可以使用一个简单的包装器来解析传递的 "URL" 并动态生成这样的配置文件。
我们必须在 dot space filename
模式下调用它。
#!/bin/sh
if [ $# -eq 0 ]; then
echo "Usage: . ./db2connect host:port/dbname USER username [USING password]" >&2
exit 1
fi
DSN=
CFGFILE=./db2dsdriver.cfg.$$
dbname=${DSN#*/}
hp=${DSN%/*}
host=${hp%:*}
port=${hp#*:}
cat > ${CFGFILE} <<EOF
<configuration>
<dsncollection>
<dsn alias="${dbname}" name="${dbname}" host="${host}" port="${port}"/>
</dsncollection>
<databases>
<database name="${dbname}" host="${host}" port="${port}"/>
</databases>
</configuration>
EOF
cfg_bkp=${DB2DSDRIVER_CFG_PATH}
export DB2DSDRIVER_CFG_PATH=${CFGFILE}
shift
db2 connect to ${dbname} "$@"
export DB2DSDRIVER_CFG_PATH=${cfg_bkp}
rm -f ${CFGFILE}
对你有用吗?