• Oracle通过DBLINK访问达梦数据库


    环境需求

    需要安装配置以下相关软件:

    1、Oracle Gateways

    2、ODBC数据源(gateway机器)

    3、达梦数据库软件(gateway机器)

    安装配置

    Windows环境

    安装达梦数据库软件

    安装步骤省略,可以参考DM 数据库快速上手指南 | 达梦技术文档 (dameng.com)

    Windows ODBC数据源配置

    配置ODBC数据源名称为DM8DSN (后面gateway的initxxx.ora文件要用到)

    image-20211123114321371

    image-20211123114433393

    安装Oracle Gateways

    安装比较简单,安装组件选择ODBC

    image-20211123105026831

    由于Oracle gateways与数据库服务器安装在同一台机器,所以本次这里就不再进行监听创建(也可以创建),可以在配置好gateway相关配置文件后,在现有的Oracle数据库监听文件中添加gateway的监听。如果gateway与Oracle数据库服务器不在同一台,则这里需要创建gateway的监听。

    image-20211123105308575

    配置Oracle Gateways

    进入到Gateway HOME目录下,本次安装的gateway home目录为C:\app\LW\gateways\11.2.0\tg_1。

    主要配置文件目录在HOME目录下的hs/admin目录下:

    PS C:\app\LW\gateways\11.2.0\tg_1\hs\admin> ls
    
    
        目录: C:\app\LW\gateways\11.2.0\tg_1\hs\admin
    
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a----         2013/10/9     13:29           1147 extproc.ora
    -a----         2013/10/9     13:29            327 initdg4odbc.ora
    -a----        2021/11/23     10:51            420 listener.ora.sample
    -a----        2021/11/23     10:51            253 tnsnames.ora.sample
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    主要配置文件和模板文件内容如下:

    1、initdg4odbc.ora(主要配置文件)

    注意:文件名init后面接的是实例名,在监听文件中添加gateway监听信息时指定的SID_NAME

    PS C:\app\LW\gateways\11.2.0\tg_1\hs\admin> cat .\initdg4odbc.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 = 
    HS_FDS_TRACE_LEVEL = 
    
    
    #
    # Environment variables required for the non-Oracle system
    #
    #set =
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2、Gateway监听配置模板文件,在Oracle数据库服务器上已有创建监听的情况下,将SID_DESC那块内容复制到Oracle监听文件的SID_LIST下。

    PS C:\app\LW\gateways\11.2.0\tg_1\hs\admin> cat .\listener.ora.sample
    # This is a sample listener.ora that contains the NET8 parameters that are
    # needed to connect to an HS Agent
    
    LISTENER =
     (ADDRESS_LIST=
          (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
     )
    
    SID_LIST_LISTENER=
      (SID_LIST=
          (SID_DESC=
             (SID_NAME=dg4odbc)
             (ORACLE_HOME=C:\app\LW\gateways\11.2.0\tg_1)
             (PROGRAM=dg4odbc)
          )
      )
    
    #CONNECT_TIMEOUT_LISTENER = 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    3、tnsnames.ora配置模板文件,可以将文件中的内容添加到Oracle服务器的tnsnames.ora文件中

    PS C:\app\LW\gateways\11.2.0\tg_1\hs\admin> CAT .\tnsnames.ora.sample
    # This is a sample tnsnames.ora that contains the NET8 parameters that are
    # needed to connect to an HS Agent
    
    dg4odbc  =
      (DESCRIPTION=
        (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
        (CONNECT_DATA=(SID=dg4odbc))
        (HS=OK)
      )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    配置gateway initdg4dm8.ora文件

    本次这里采用的是非默认的文件,复制initdg4odbc.ora文件并重命名为initdg4dm8.ora,配置内容如下:

    PS C:\app\LW\gateways\11.2.0\tg_1\hs\admin> cat .\initdg4dm8.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 = DM8DSN   ----配置的ODBC数据源名称
    HS_FDS_TRACE_LEVEL = OFF       ----调试排错的时候可以开启trace
    
    
    #
    # Environment variables required for the non-Oracle system
    #
    #set =
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    配置listener.ora监听文件

    本次是直接在Oracle数据库服务器上安装的gateway,直接在现有数据库监听配置文件中添加gateway监听信息。

    本机ORACLE_HOME为:C:\app\LW\product\11.2.0\dbhome_1

    本机Oracle数据库监听配置文件路径:ORACLE_HOME/network/admin,

    添加内容如下:

    PS C:\app\LW\product\11.2.0\dbhome_1\NETWORK\ADMIN> cat .\listener.ora
    # listener.ora Network Configuration File: C:\app\LW\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:\app\LW\product\11.2.0\dbhome_1)
          (PROGRAM = extproc)
          (ENVS = "EXTPROC_DLLS=ONLY:C:\app\LW\product\11.2.0\dbhome_1\bin\oraclr11.dll")
        )
          (SID_DESC=
             (SID_NAME=dg4dm8)      ---SID_NAME对应gateway参数配置文件后面的名称init+SID_NAME.ora
             (ORACLE_HOME=C:\app\LW\gateways\11.2.0\tg_1)
             (PROGRAM=dg4odbc)      ---这里表示配置的是ODBC网关
          )
      )
    
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = LeeWen)(PORT = 1521))
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        )
      )
    
    ADR_BASE_LISTENER = C:\app\LW
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    然后,重启Oracle数据库监听。监听正常重启后,可以看到监听中已注册dg4dm8.

    image-20211123120638863

    配置tnsnames.ora文件

    在ORACLE_HOME/network/admin/tnsnames.ora文件中添加如下内容:

    dg4dm8  =
      (DESCRIPTION=
        (ADDRESS=(PROTOCOL=tcp)(HOST=LeeWen)(PORT=1521))
        (CONNECT_DATA=(SID=dg4dm8))
        (HS=OK)        ---这里表示连接的是异构数据库
      ) 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    添加内容可以从之前Gateway安装后的模板文件中拷贝然后修改,内容中的SID与监听中配置的SID要相同,网络服务名可以自定义。

    Oracle 数据库中创建DBLINK

    达梦数据库用户为LINK_USER,密码为123456789

    连接到:
    Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    
    SQL> create public database link LINK_DM8 connect to LINK_USER identified by "123456789" using 'dg4dm8';
    
    数据库链接已创建。
    
    SQL> select * from test@link_dm8;
    
    BANNER
    --------------------------------------------------------------------------------
    ID_CODE
    --------------------------------------------------------------------------------
    DM Database Server 64 V8
    1-2-70-21.09.24-147898-10028-ENT  Pack2
    
    DB Version: 0x7000c
    1-2-70-21.09.24-147898-10028-ENT  Pack2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    创建成功,可以正常访问达梦数据库。

    Linux环境

    Linux环境上的达梦数据库软件安装以及Oracle Gateways安装配置,与Windows环境没有太大区别。

    Linux环境上配置达梦数据库ODBC源可以参考达梦DBLINK之DM访问Oracle配置步骤 | 达梦技术社区 (dameng.com) 中的ODBC数据源配置。

    简单测试总结

    1、insert into 远程数据库表 select * from本地表

    Oracle端不支持,报错:ORA-02025: SQL 语句的所有表均必须在远程数据库中

    image-20211123143154842

    2、insert into 本地表 select * from 远程数据库表

    支持,但是需要注意本地表字段类型与远程数据库表字段类型匹配。

    image-20211123143535303

    同样,create table 本地表 as select * from 远程数据库表;也是可以正常执行。

    image-20211123144340114

    3、触发器

    在触发器中使用DBLINK访问表也存在一些限制。

    更多资讯请上达梦技术社区了解:https://eco.dameng.com

  • 相关阅读:
    MySQL 常用函数
    6000字Locust入门详解
    CP Autosar——EthIf配置
    又是一篇教你摸鱼的文章,用Python实现自动发送周报给老板
    idea打开项目,不显示代码文件夹目录如何解决
    es(Elasticsearch)介绍
    芯源&立创EDA训练营——无刷电机驱动
    React: JSX 、虚拟 DOM、组件配置(props、state、PropTypes、createContext、props.children)
    Rails进阶——框架理论认知与构建方案建设(一)
    mysql建数据库时我们的字符集如何选择
  • 原文地址:https://blog.csdn.net/Mrkill123/article/details/127459511