因为有个业务场景需要访问客户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. 程序员都在用的 IDEA 插件(不断更新)

    IDEA一些不错的插件分享 目录 IDEA一些不错的插件分享 插件集合 CamelCase Translation LiveEdit MarkDown Navigator Jrebel CheckSt ...

  2. 远程快速安装redis和远程连接

    一.安装redis    1.设置redis的仓库地址, 执行命令: yum install epel-release    出现下图即设置成功 2.安装redis 执行命令如下: yum insta ...

  3. 彻底理解JavaScript ES6中的import和export

    0.前言 前端工程,在最早的时候是没有模块的概念的.随着前端工程的发展,前端开发也越来越规范化,更像是软件工程了.那么随之而来的,为了解决工程化的问题,就引入了模块的概念.但是在早期,因为ecmasc ...

  4. 【GAN】GAN设计与训练集锦

    以下内容纯属经验之谈,无公式推断!部分内容源自其他博客或课程,并已标注来源. 问题篇[1] 1.模式崩溃 在某个模式(mode)下出现大量重复样本,如左图中,生成的样本分布靠得很近,较聚集,可视化如右 ...

  5. [JavaWeb基础] 018.Struts2 Action通配符使用

    Struts2中有一个很牛逼的action通配符,可以用来简化action配置,以我们将要讲解的案例来说,如果我们要对一个学生信息进行增加,删除,修改,那么按照原来的做法,我们需要写3个Action来 ...

  6. [SD心灵鸡汤]004.每月一则 - 2015.08

    1.事常与人违,事总在人为. 2.骏马是跑出来的,强兵是打出来的. 3.驾驭命运的舵是奋斗.不抱有一丝幻想,不放弃一点机会,不停止一日努力. 4.如果惧怕前面跌宕的山岩,生命就永远只能是死水一潭. 5 ...

  7. sqlmap中文手册

    Sqlmap中文手册  -Darren制作 零.前言 Sqlmap是十分著名的.自动化的SQL注入工具.为了较为系统地学习Sqlmap,我决定翻译一遍Sqlmap的用户手册,于是便有了此文.由于我英语 ...

  8. Beta冲刺——5.26

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.组员一起学习Git分支管 ...

  9. Java实现洛谷 P1873 砍树(StreamTokenizer+IO+二分)

    P1873 砍树 输入输出样例 输入 5 20 4 42 40 26 46 输出 36 PS: get新知识,以前只知道STringTokenizer并没有了解过StreamTokenizer,这次才 ...

  10. Java实现 LeetCode 558 四叉树交集(四叉树,第一次遇到,研究了半天)

    558. 四叉树交集 四叉树是一种树数据,其中每个结点恰好有四个子结点:topLeft.topRight.bottomLeft 和 bottomRight.四叉树通常被用来划分一个二维空间,递归地将其 ...