注册
异构数据库下(dm-oracle)的dblink创建
专栏/培训园地/ 文章详情 /

异构数据库下(dm-oracle)的dblink创建

sun 2024/12/05 461 0 0
摘要

一 背景
在信创项目的迁移适配中,往往会遇到带迁移数据库与其他数据库链接,调取其他数据库实例数据等问题。这时我们今天的主角就登场了。
数据库链接对象 (LINK) 简称:dblink是数据库链接顾名思义就是数据库的链接,就像电话线一样,是一个通道,当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就必须要创建远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。
那么问题来了,原有同构数据库之前的dblink由于源端使用的是相同版本的数据库,dblink创建相对容易,那么异构数据库改如何操作呢?我们今天分别配置下dm到oracle,以及oracle到dm的dblink创建。
创建dblink必要条件说明
1.关闭防火墙
2.将selinux设置为关闭:打开文件/etc/selinux/config,将其中SELINUX的值改为”disabled”(默认值:enforcing)。
二 创建dm到oracle的dblink
1 首先需要下载oracle对应的版本的客户端,下载地址如下:
客户端下载
找到对应oracle数据库版本下载即可。
2 下载后解压客户端

Archive:  instantclient-basic-linux.x64-11.2.0.4.0.zip
  inflating: instantclient_11_2/BASIC_README  
  inflating: instantclient_11_2/adrci  
  inflating: instantclient_11_2/genezi  
  inflating: instantclient_11_2/libclntsh.so.11.1  
  inflating: instantclient_11_2/libnnz11.so  
  inflating: instantclient_11_2/libocci.so.11.1  
  inflating: instantclient_11_2/libociei.so  
  inflating: instantclient_11_2/libocijdbc11.so  
  inflating: instantclient_11_2/ojdbc5.jar  
  inflating: instantclient_11_2/ojdbc6.jar  
  inflating: instantclient_11_2/uidrvci  
  inflating: instantclient_11_2/xstreams.jar  

3 拷贝.so文件到dm的bin路径下
检查是否缺少rpm包
微信截图_20241203171001.png

cp libocci.so.11.1 libocci.so
cp *.so* /home/dmdba/dmdbms/bin
cp *.so* /lib64

4 修改相关.so权限

[root@test1 instantclient_11_2]# chown dmdba:dinstall /home/dmdba/dmdbms/bin/*.so*

5 添加dmdba用户对oracle客户端的环境变量

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/dmdba/dmdbms/bin:/home/dmdba/instantclient_11_2"
[dmdba@test1 ~]$ source .bash_profile

6 重启dm数据库实例

Stopping DmServiceTEST1:                                   [ OK ]
Starting DmServiceTEST1:                                   [ OK ]

7 在dm端创建dblink


8 验证:
在oracle端创建测试表:
微信截图_20241203171052.png

在dm端有验证:
微信截图_20241203171101.png

三 oracle 到dm的dblink
由于oracle不支持原生的异构数据库dblink,这是我们解决的办法就是通过oracle的透明网关,以及odbc协议来解决,整体的架构如下:
微信截图_20241203171343.png

1首先下砸oracle透明网关,登录一下网址

https://edelivery.oracle.com/osdc/faces/SoftwareDelivery

搜索 Oracle Database Gateways,找到相对应的oracle版本
微信截图_20241203171412.png

2 安装透明网关
微信截图_20241203171457.png

3安装dm客户端
在ORACLE服务器安装DM客户端(此安装过程略),安装后生成的$DM_HOME/libdodbc.so文件即DM数据库的ODBC驱动,本案例路径为:/dmdbms/bin/libdodbc.so,后面配置ODBC要用到。
4添加oracle用户环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/oracle/dmhs/bin:/dmdbms/bin:/usr/lib64:$ORACLE_HOME/lib

5安装odbc
. 1)配置ODBC驱动
LINUX环境中配置ODBC,要安装gcc包。

rpm -aq|grep gcc
tar -zxvf unixODBC-2.3.0.tar.gz
cd unixODBC-2.3.0

2)配置ODBC(root)

./configure --enable-gui=no

3)编译ODBC

make
make install

4)查看ODBC版本

odbc_config --version

5)查看ODBC配置文件路径

odbc_config --odbcini
odbc_config --odbcinstini
odbcinst -j

  1. 配置odbcinst.ini
vi /etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DIRVER FOR DM8
DRIVER = /dmdbms/bin/libdodbc.so

7)配置odbc.ini

[root@test1 ~]# cat  /usr/local/etc/odbc.ini
[dm8]
Desription = DM ODBC DSND
Driver = DM8 ODBC DRIVER
SERVER = 192.168.168.20
UID = SYSDBA
PWD = SYSDBA
TCP_PORT = 5237

并给oracle用户可读权限

[root@test1 admin]# chmod 777  /usr/local/etc/odbc.ini

8)测试odbc连接dm
微信截图_20241203172110.png

6添加透明网关
配置可以参考如下网址
透明网关下载

[oracle@test1 admin]$ pwd
/oracle/product/11.2.0/db_1/hs/admin
[oracle@test1 admin]$ cat initdm8.ora 
HS_FDS_CONNECT_INFO=dm8
HS_FDS_TRACE_LEVEL = OFF  #生产环境配置off,$ORACLE/hs/log查看日志
HS_FDS_SHAREABLE_NAME=/dmdbms/bin/libdodbc.so
HS_LANGUAGE=AL32UTF8
HS_NLS_NCHAR=UCS2
HS_RPC_FETCH_REBLOCKING=OFF
HS_FDS_FETCH_ROWS=100
# 下面两个参数是保障varchar2的长度保持一致。如果是默认的参数,oracle侧查看会是达梦侧查看的6倍
KS_KEEP_REMOTE_COLUMN_SIZE=ALL  #禁止从非Oracle数据库到Oracle数据库数据类型长度扩展
KS_NLS_LENGTH_SEMANTICS=CHAR  #网关字符集到Oracle字符集的比率扩展
set ODBCINI=/usr/local/etc/odbc.ini

7配置监听

[oracle@test1 admin]$ pwd
/oracle/product/11.2.0/db_1/network/admin
[oracle@test1 admin]$ cat listener.ora
# listener.ora Network Configuration File: /oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (SID_NAME=dm8)
      (ORACLE_HOME=/oracle/product/11.2.0/db_1)
      (PROGRAM=dg4odbc)
      (ENVS=LD_LIBRARY_PATH=/dmdbms/bin:/usr/lib64:$ORACLE_HOME/lib)
    )
)

8 重新启动监听

[oracle@test1 admin]$ lsnrctl status

LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 03-DEC-2024 14:58:54

Copyright (c) 1991, 2011, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date                03-DEC-2024 14:58:47
Uptime                    0 days 0 hr. 0 min. 6 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File         /oracle/diag/tnslsnr/test1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=test1)(PORT=1521)))
Services Summary...
Service "dm8" has 1 instance(s).
  Instance "dm8", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

9 配置tns

[oracle@test1 admin]$ cat tnsnames.ora 
# tnsnames.ora Network Configuration File: /oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

CS =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = test1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = cs)
    )
  )
dm8 =
  (DESCRIPTION=
    (ADDRESS=
        (PROTOCOL=TCP) (HOST=192.168.168.8) (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVICE_NAME=dm8)
    )
    (HS=OK)
)

10 测试dm8服务是否畅通

[oracle@test1 admin]$ tnsping dm8

TNS Ping Utility for Linux: Version 11.2.0.3.0 - Production on 03-DEC-2024 15:02:16

Copyright (c) 1997, 2011, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (HOST=192.168.168.8) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=dm8)) (HS=OK))
OK (0 msec)


11 在oracle端创建dblink

create public database link ora_to_dm connect to SYSDBA identified by "SYSDBA" USING 'dm8';

查询dm数据库数据
image.png
四 总结
1 达梦到oracle的dblink通过dpi的方式来实现数据库链接。
2 oracle到达梦的dblink则需要透明网关和odbc来实现。
3 达梦数据库在兼容oracle数据库功能上已经接近完美。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服