因为有个业务场景需要访问客户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. Linux(一):VMware安装出现的问题

    目录 1 兼容性问题 2 VMware打卡虚拟机提示"此虚拟机可能已被复制或移动" 1 兼容性问题 问题:VMware Workstation 与 Device/Credentia ...

  2. java内部类简单用法

    package innerClass; /** * 特点 * 1:增强封装性,通过把内部类隐藏在外部类的里面,使得其他类不能访问外部类. * 2:增强可维护性. * 3:内部类可以访问外部的成员. * ...

  3. Java-接口的本质

    https://mp.weixin.qq.com/s/tEVw0j18rX2hxt-guXQJ-w 大道至简,本质往往是很朴素的. 本质: 类是主体,接口是主体之间交流沟通的规约. 位置:1. 主体站 ...

  4. JavaScript (三) js的基本语法 - - 数组 与函数 、关键字

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.关键字 1.break 关键字使用 break关键字:如果在循环中使用,遇到了break,则立刻跳出 ...

  5. 使用Python代码制作GIF动态图

    使用Python  PIL.Image 制作GIF图片: import  PIL.Image                      相关模块 img = Image.open(img_name)  ...

  6. Java实现 LeetCode 887 鸡蛋掉落(动态规划,谷歌面试题,蓝桥杯真题)

    887. 鸡蛋掉落 你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑. 每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去. 你知道存在楼层 F ,满足 0 < ...

  7. Java实现 蓝桥杯VIP 算法训练 矩阵加法

    时间限制:1.0s 内存限制:512.0MB 问题描述 给定两个N×M的矩阵,计算其和.其中: N和M大于等于1且小于等于100,矩阵元素的绝对值不超过1000. 输入格式 输入数据的第一行包含两个整 ...

  8. Java实现 蓝桥杯VIP 算法训练 入学考试

    问题描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:" ...

  9. Java实现蓝桥杯单位转换

    单位转换 [问题描述] BobLee最近在复习考研,在复习计算机组成原理的时候,遇到了一个问题.就是在计算机存储里面的单位转换. 我们都知道1MB=1024KB,1KB=1024B,1B=8bit,他 ...

  10. Java实现UVA10131越大越聪明(蓝桥杯每周一题)

    10131越大越聪明(蓝桥杯每周一题) [问题描述] 一些人认为,大象的体型越大,脑子越聪明.为了反驳这一错误观点,你想要分析一组大象的数据,找出尽量 多的大象组成一个体重严格递增但 IQ 严格递减的 ...