Oracle连接Db2

Posted yehai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle连接Db2相关的知识,希望对你有一定的参考价值。

因为有个业务场景需要访问客户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. 解压并把驱动放到自己想安装到目录,进入到目录下的clidriverin路径里打开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驱动的主目录下找到clidrivercfg路径下新建一个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进入到驱动安装目录下的clidriverin

    # 停止
    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安装目录下product11.2.0dbhome_1hsadmin路径的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安装目录下product11.2.0dbhome_1NETWORKADMIN路径的listener.ora文件打开,里面原来的配置不要动在标识后面添加一条配置。配置内容如下:

    # listener.ora Network Configuration File: C:****product11.2.0dbhome_1
    etworkadminlistener.ora
    # Generated by Oracle configuration tools.
    
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = CLRExtProc)
          (ORACLE_HOME = C:****product11.2.0dbhome_1)
          (PROGRAM = extproc)
          (ENVS = "EXTPROC_DLLS=ONLY:C:****product11.2.0dbhome_1inoraclr11.dll")
        )
       # 在这里添加一条配置
       (SID_DESC=
          (SID_NAME=testdb2) # 这里改成自己配置的inittestdb2.ora文件里的名称
          (ORACLE_HOME=C:****product11.2.0dbhome_1) # **号自己替换成自己的路径
          (PROGRAM=dg4odbc)
       )
       # 这里结束
      )
    
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
          (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        )
      )
    
    ADR_BASE_LISTENER = C:appAdministrator
    
    
    
  3. 配置tnsnames.ora

    找到Oracle安装目录下product11.2.0dbhome_1NETWORKADMIN路径的tnsnames.ora文件打开,里面原来的配置不要动在标识后面添加一条配置。配置内容如下:

    # tnsnames.ora Network Configuration File: C:****product11.2.0dbhome_1
    etworkadmin	nsnames.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的主要内容,如果未能解决你的问题,请参考以下文章

JDBC DB2 无法连接(SQLSTATE=08S01)

DB2 与 Oracle 中的查询

Oracle SQL Developer 中的 DB2 - 模式驱动程序错误

vb.net如何连接远程db2数据库

如何用DB2客户端连接远程数据库

常用数据库的连接参数