因为有个业务场景需要访问客户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. Unity调用Android Studio中的Java方法

    1. 新建Unity项目: 2. Android Studio中新建EmptyActivity: 3. 新建安卓项目时记住最小版本号: 4. 将左侧项目文件浏览面板切换到Project项下,在本项根节 ...

  2. 实验四:Linux系统C语言开发环境学习

    项目 内容 这个作业属于哪个课程 班级课程主页链接 这个作业的要求在哪里 作业要求 学号-姓名 17043133-木腾飞 作业学习要求 1.学习Linux系统中如何查看帮助文档:2.在Linux系统中 ...

  3. [VuePress]个人博客 -- 批处理自动化编译提交 -- 排错记录

    建了一个VuePress的个人博客 想着写个批处理,自动编译并上传到GitHub. 结果遇到两个问题, 一个是,vuepress build docs编译后,这个命令执行完就exit了 研究了下bat ...

  4. Redis详解(十)------ 从零开始搭建集群

    在上一篇博客我们介绍了------Redis哨兵(Sentinel)模式,哨兵模式主要是解决高可用问题,在master节点宕机时,slave节点能够自动切换成为master节点 本篇博客我们来介绍Re ...

  5. 经典卷积神经网络算法(3):VGG

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  6. Rocket - tilelink - Xbar

    https://mp.weixin.qq.com/s/UXFHYEQaYotWNEhshro68Q   简单介绍Xbar的实现.   ​​   1. 基本介绍   用于为Xbar的输入和输出连接生成内 ...

  7. vue 中<vue-scroll >滚动条回到顶部

    今天项目碰到一个<vue-scroll >滚动条要回到顶部的需求,查询了好久终于解决了,这里记录一下: 其实就是scrollIntoView()方法的使用(官方文档): 需要注意的是要求页 ...

  8. ssm中的依赖配置

    <dependency> <groupId>org.springframework</groupId> <artifactId>spring-conte ...

  9. Java实现 LeetCode 646 最长数对链(暴力)

    646. 最长数对链 给出 n 个数对. 在每一个数对中,第一个数字总是比第二个数字小. 现在,我们定义一种跟随关系,当且仅当 b < c 时,数对(c, d) 才可以跟在 (a, b) 后面. ...

  10. Java实现 LeetCode 583 两个字符串的删除操作(求最长公共子序列问题)

    583. 两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: " ...