ODI connect DB2

今天下午花了老鼻子劲把Oracle Data Integrator (ODI)连接DB2给搞定了,感谢weilin和Henry,感谢北京的shuoji,上海的ricky等童鞋。
后来发现不是ODI的问题,而是DB2服务端的问题,在这个问题搞定之后,通过SQL Developer也可以连接成功了。

首先第一步是从DB2的安装文件中把驱动文件copy到ODI的目录,两个文件分别是:

db2jcc.jar
db2jcc_license_cu.jar

然后把这两个驱动文件放到ODI的driver文件目录:

C:\Documents and Settings\< 用户名>\Application Data\odi\oracledi\userlib
或者目录是(~/.odi/oracledi/userlib,在Unix系统上)
D:\Oracle\Middleware\Oracle_ODI1\oracledi\agent\drivers (odi home)

在ODI的物理技术中配置一个UDB DB2,然后使用Universal JDBC driver,详细配置如下:

com.ibm.db2.jcc.DB2Driver
jdbc:db2://:60000/

问题就出在这里的端口60000,可是登陆到服务器发现60000端口根本没有监听。

netstat -an | grep 60000 无任何返回

确定db2是启动的,而且通过本地的db2 connect to dbname 是可以成功连接到实例和数据库。

检查了下db2的dbm也就是实例的配置参数,发现TCP的服务配置是空。

$db2 get dbm cfg | grep TCP
TCP/IP Service name (SVCENAME) =

$ db2 update dbm cfg using SVCENAME 60000
DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed
successfully.

这里的service name可以有两种方式,直接填写端口,或者使用/etc/services文件里面的映射。比如在/etc/services文件追加下面的内容,那么刚才的SVCENAME就可以写成db2c_db2。

db2c_db2 60000/tcp

设置好之后,发现60000端口的监听还是没有。

进一步研究发现除了db的配置和dbm的配置之外,还有一个系统的配置文件注册库没有设置对,问题就出在这里(感谢Weilin)

$ db2set -all
[i] DB2COMM=TCPIP (通过命令加上这个即可: db2set DB2COMM=TCPIP )
[g] DB2SYSTEM=x4170m3-200143
[g] DB2INSTDEF=db2irun
[g] DB2ADMINSERVER=dasusr1
$

这个时候重启数据库即可:

db2stop force
db2start

这个时候通过netstat -an | grep 60000可以看到监听已经起来,而且SQL developer和ODI均可以连接成功。

数据的ELT到Oracle当然也是没问题的。

This entry was posted in 数据库 and tagged , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *