因为有个业务场景需要访问客户DB2数据库的数据,我们使用的Oracle,百度一下是有方法的,本来以为很简单,没想到搞了一天,因为数据库版本都太老,使用的也少走了不少弯路,在此记录下来给需要的人借鉴。
我们客户使用的是DB2 V9.7,我需要自己先本地测试再去连接客户数据库。IBM官网已经不再提供DB2 V9.7,网上找了很久找到一个这个版本IBM.DB2.Express-C.9.7数据库.db2exc_970_WIN_x86,将就用。win10系统安装不了,我是虚拟机win7安装成功。
按步骤安装好DB2。Oracle连接DB2是通过ODBC然后创建dblink连接,而且DB2 9.7 最高只支持Oracle 11C连接。
配置ODBC
-
解压并把驱动放到自己想安装到目录,进入到目录下的
\clidriver\bin
路径里打开CMD执行命令安装驱动
db2oreg1.exe -i
如果是powellshell则是
./db2oreg1.exe -i
-
安装成功后通过win7的搜索打开ODBC可以看到刚才已经安装的驱动,如下图
-
添加系统DSN
选择对应的驱动添加
添加ip、端口、数据库名称
-
-
测试连接是否成功
连接成功。
-
添加cfg配置文件,如果没有这个文件,在dblink连接时会报错:连接ORACLE到非Oracle系统时返回此信息:
[IBM][CLI Driver] SQL1531N...
找到刚才安装odbc驱动的主目录下找到
\clidriver\cfg
路径下新建一个db2dsdriver.cfg
配置文件,内容如下<!-- db2dsdriver.cfg data source --> <configuration> <dsncollection> <!-- alias=odbc数据源名称 其他自己依自己的情况填写 --> <dsn alias="testdb2" name="test" host="localhost" port="50000"> <parameter name="UserID" value="***"/> <parameter name="Password" value="***"/> </dsn> </dsncollection> </configuration>
文件创建好后重启DB2,测试文件是否无误,打开CMD进入到驱动安装目录下的
\clidriver\bin
# 停止 db2stop # 启动 db2start # 检查配置 后面的testdb2自己改成自己的数据源名称 db2cli validate -dsn testdb2
出现如下提示说明无误,不然请根据提示排查问题
[ Parameters used for the connection ] Keywords Valid For Value --------------------------------------------------------------------------- DATABASE CLI,.NET,ESQL test HOSTNAME CLI,.NET,ESQL localhost PORT CLI,.NET,ESQL 50000 USERID CLI,.NET ******** PASSWORD CLI,.NET ********
配置Oracle连接
-
配置
initdg4odbc.ora
找到Oracle安装目录下
\product\11.2.0\dbhome_1\hs\admin
路径的initdg4odbc.ora
复制一份命名为inittestdb2.ora
,名称就用init+数据源名称.ora
。配置内容如下:# This is a sample agent init file that contains the HS parameters that are # needed for the Database Gateway for ODBC # # HS init parameters # HS_FDS_CONNECT_INFO = testdb2 # 自己配置的odbc数据源名称 HS_FDS_TRACE_LEVEL = off # 是否开启日志记录 on off # # Environment variables required for the non-Oracle system # #set <envvar>=<value>
-
配置
listener.ora
找到Oracle安装目录下
\product\11.2.0\dbhome_1\NETWORK\ADMIN
路径的listener.ora
文件打开,里面原来的配置不要动在标识后面添加一条配置。配置内容如下:# listener.ora Network Configuration File: C:\**\**\product\11.2.0\dbhome_1\network\admin\listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\**\**\product\11.2.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:C:\**\**\product\11.2.0\dbhome_1\bin\oraclr11.dll") ) # 在这里添加一条配置 (SID_DESC= (SID_NAME=testdb2) # 这里改成自己配置的inittestdb2.ora文件里的名称 (ORACLE_HOME=C:\**\**\product\11.2.0\dbhome_1) # **号自己替换成自己的路径 (PROGRAM=dg4odbc) ) # 这里结束 ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) ) ADR_BASE_LISTENER = C:\app\Administrator
-
配置
tnsnames.ora
找到Oracle安装目录下
\product\11.2.0\dbhome_1\NETWORK\ADMIN
路径的tnsnames.ora
文件打开,里面原来的配置不要动在标识后面添加一条配置。配置内容如下:# tnsnames.ora Network Configuration File: C:\**\**\product\11.2.0\dbhome_1\network\admin\tnsnames.ora # Generated by Oracle configuration tools. LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ORACLR_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) ) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) # 这里添加一条配置 testdb2 = # 名称可以自定义 (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)) # 不用修改 (CONNECT_DATA=(SID=testdb2)) # sid改成和listener.ora配置文件一样的sid名称 (HS=OK) )
-
测试配置文件是否都正常
打开CMD依次执行如下指令重启Oracle监听服务,如果没有报错就是正常的
lsnrctl stop lsnrctl start
服务摘要.. 服务 "CLRExtProc" 包含 1 个实例。 实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 服务 "testdb2" 包含 1 个实例。 实例 "testdb2", 状态 UNKNOWN, 包含此服务的 1 个处理程序... 命令执行成功
创建dblink并测试连接
-
创建dblink
-- 参数依次为:dblink名称、用户名、密码、tnsnames.ora文件配置的服务名称 create database link "oradb2" connect to "user" identified by "pwd" using ‘testdb2‘;
-
测试连接
select * from dual@oradb2
查询到数据,大功告成。
自己整了好久才搞定,因为找资料很多都是不太一样的,所以记录下来给需要的人参考。