因为有个业务场景需要访问客户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

  1. 下载驱动v10.5fp1_ntx64_odbc_cli

  2. 解压并把驱动放到自己想安装到目录,进入到目录下的\clidriver\bin路径里打开CMD

    执行命令安装驱动

    db2oreg1.exe -i

    如果是powellshell则是

    ./db2oreg1.exe -i
  3. 安装成功后通过win7的搜索打开ODBC可以看到刚才已经安装的驱动,如下图

    1. 添加系统DSN

      选择对应的驱动添加

    添加ip、端口、数据库名称

  4. 测试连接是否成功

    连接成功。

  5. 添加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连接

  1. 配置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>
  2. 配置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
  3. 配置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)
    )
  4. 测试配置文件是否都正常

    打开CMD依次执行如下指令重启Oracle监听服务,如果没有报错就是正常的

    lsnrctl stop
    lsnrctl start
    服务摘要..
    服务 "CLRExtProc" 包含 1 个实例。
    实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    服务 "testdb2" 包含 1 个实例。
    实例 "testdb2", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    命令执行成功

创建dblink并测试连接

  1. 创建dblink

    -- 参数依次为:dblink名称、用户名、密码、tnsnames.ora文件配置的服务名称
    create database link "oradb2" connect to "user" identified by "pwd" using 'testdb2';
  2. 测试连接

    select * from dual@oradb2

    查询到数据,大功告成。

自己整了好久才搞定,因为找资料很多都是不太一样的,所以记录下来给需要的人参考。

参考内容

  1. DB2安装教程
  2. Oracle通过DBlink连接DB2数据库
  3. ORACLE通过透明网关连接DB2
  4. db2 odbc配置

Oracle连接Db2的更多相关文章

  1. Jmeter连接DB2/ORACLE/MYSQL数据库

    连接DB2 1.将db2数据库驱动db2java.jar.db2jcc.jar放入jmeter的lib/下,同时也要放入本地jdk目录下例如:C:\Program Files\Java\jdk1.7. ...

  2. Oracle与DB2的区别

    系统结构概述 首先,我们需要理解 Oracle 使用的架构,并理解它与 DB2 的不同之处.图 1 展示了 Oracle 的系统结构.将该图与 图 2 进行比较,后者显示了 DB2 的系统结构.在阅读 ...

  3. Oracle、DB2、MySql、SQLServer JDBC驱动

    四种数据库JDBC驱动,还列出了连接的Class驱动名和Url Pattern,DB2包括Type 2.Type 3和Type 4三种模式.注意驱动包名称的大小写. Oralce连接驱动包名和URL ...

  4. 万能数据库连接类-Oracle、DB2 、Access 、Sql Server

    package cc.apps.report;   import java.sql.Connection; import java.sql.DriverManager; import java.sql ...

  5. oracle与DB2

    1.体系结构,DB2的实例和数据库分开的做法,我个人还是比较喜欢的,因为实例可以创建多个,数据库的恢复直接恢复到实例下就可以了,相对ORACLE简单多了. 2.管理工具,DB2的管理工具做得太简陋了, ...

  6. (转)Oracle与DB2在数据库高可用技术上的相同与差异探讨

    原文:http://www.talkwithtrend.com/Article/178339 数据库建设过程中,高可用是每一个企业数据中心数据库建设过程中至关重要的一个关注点,直接关系到业务连续性和稳 ...

  7. oracle与DB2的一些架构

    首先,我们需要理解 Oracle 使用的架构,并理解它与 DB2 的不同之处.图 1 展示了 Oracle 的系统结构.将该图与 图 2 进行比较,后者显示了 DB2 的系统结构.在阅读本文的时候,为 ...

  8. Oracle连接odbc数据源

    Oracle连接odbc数据源 说明 oracle连接ODBC数据源有两种方式,hsodbc和dg4odbc,简单说dg4odbc是hsodbc的升级.两种连接方法大致一样,现将连接步骤说明如下: 检 ...

  9. ORACLE连接SQLSERVER

    一.实验(实验成功) 1.实验目标:ORACLE连接SQLSERVER以及查询数据 2.搭建的环境: oracle 9i 9.0.2.0.1 地址:192.168.40.139 sql2000 的数据 ...

随机推荐

  1. python 格式化输出(% VS format)

    提到Python中的格式化输出方法,一般来说有以下两种方式: 1)% 格式说明由%和格式字符组成,如%f,%s,%d,它的作用是将数据按照指定的格式输出.格式说明是由“%”字符开始的. #1.输出字符 ...

  2. python常见面试题讲解(二)计算字符个数

    题目描述 写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数.不区分大小写. 输入描述: 第一行输入一个有字母和数字以及空格组成的字符串,第二行输入一个字 ...

  3. Python_OpenCV学习记录01安装

    Python照样快! 众所周知,虽然Python语法简洁,编写高效,但相比C/C++运行慢很多.然 而Python还有个重要的特性:它是一门胶水语言!Python可以很容易地扩展 C/C++.Open ...

  4. 解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)

    一.问题 有时候我们登录Mysql输入密码的时候,会出现这种情况 mysql -u root -p Enter Password > '密码' 错误:ERROR 1045 (28000): Ac ...

  5. [推荐]大量 Blazor 学习资源(二)

    继上一篇<[推荐]大量 Blazor 学习资源(一)>之后,社区反应不错,但因个人原因导致这篇文章姗姗来迟,不过最终还是来了!这篇文章主要收集一些常用组件.书籍和电子书. 资料来源:htt ...

  6. [工具-005] C#如何绑定HotKey

    由于某种需要,需要做一个控制鼠标在屏幕乱点的程序,运用C#的 [DllImport("user32.dll")]      private static extern int mo ...

  7. 看了这篇,我确定你已经彻底搞懂Java的继承了

    遇到认真的读者是作者的一种幸运,真的,上一篇接口推送后,有好几个读者留言说,"二哥,你有一处内容需要修正,应该是接口中不能有 private 和 protected 修饰的方法." ...

  8. Redis详解(十一)------ 过期删除策略和内存淘汰策略

    在介绍这篇文章之前,我们先来看如下几个问题: ①.如何设置Redis键的过期时间? ②.设置完一个键的过期时间后,到了这个时间,这个键还能获取到么?假如获取不到那这个键还占据着内存吗? ③.如何设置R ...

  9. Java-语言基础梳理

    1.java命名规范 包名:全小写 类名,接口名:首字母大写 变量名,方法名:第一个单词皆字母小写,后面单词首字母大写 常量名:所有字母都大写 2.变量 2.1 注意事项 作用域:一对{}之间有用 必 ...

  10. jQuery-语言基础整理

    jQuery是js的一个类库,主要封装的是js中DOM操作部分,使用和原生js一样 1.需要先引入页面才可以使用 代码引入:<script src='jquery.js'></scr ...