DM8数据库的DBLINK功能(OCI方式及ODBC方式)

背景:在对DM8数据库做测试的过程中,需要验证异构数据库的DBLINK功能(ORACLE到DM8)。

遇到的问题:

1.文档资料较少,网上有一些示例,实际操作过程中会有问题,信息不完善,需要整合。

2.DM8处于国产化ARM64平台环境,而ORACLE处于X86架构的linux环境,OCI的实现方式不能够跨平台,需要使用ODBC的实现方式。

在此,对收集到的信息,并且最终验证实现的过程做个整理。方便以后使用。

--创建到oracle的外部链接DBLINK(以oracle11.2g版本为例)

前提:

1.oracle源端环境,提供数据库相关连接参数

如:

地址:192.168.136.106:1521

服务名:orcl

用户: system/tiger     

2.oracle创建测试用户及数据

create user test identified by "dameng123";

grant dba to test;

create table test.test1(a int,b varchar(200));

create view test.v_test1 as select *from test.test1;

insert into test.test1 select level , to_char(level) from dual connect by level <=1000;

commit;

方式一:OCI的方式(这种方式问题少,创建过程简单,兼容性也更强,缺点是不能跨平台)

配置DM端的OCI接口

ORACLE官网下载对应的instantclient 包:

https://www.oracle.com/database/technologies/instant-client/downloads.html

这里使用:instantclient-basic-linux.x64-19.13.0.0.0dbru-2.zip

拷贝至DM数据库服务器,/opt目录下,解压

unzip instantclient-basic-linux.x64-19.13.0.0.0dbru-2.zip

添加到/etc/ld.so.conf.d目录下

echo /opt/instantclient_19_13 > /etc/ld.so.conf.d/oracle-instantclient.conf

[root@localhost ~]# cat /etc/ld.so.conf.d/oracle-instantclient.conf

/opt/oracle/instantclient_19_13

[root@localhost ~]# ldconfig

配置LD_LIBRARY_PATH环境变量

修改dmdba用户下的.bash_profile文件,添加如下内容:

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/instantclient_19_13"

生效:

[dmdba@localhost ~]$ source .bash_profile

重启DM数据库完成。

创建dblink:

create or replace link link01 connect 'ORACLE' with TEST identified by "dameng123"  using '192.168.136.106/orcl';

 方式二:ODBC方式(不同平台架构下,需要使用此方式)

opt目录下同样操作,解压instantclient包。

unzip instantclient-basic-linux.x64-19.13.0.0.0dbru-2.zip

1)DM端安装oracle的 ODBC驱动:

https://www.oracle.com/database/technologies/instant-client/downloads.html

    这里使用:instantclient-odbc-linux.x64-19.13.0.0.0dbru.zip,其它版本对应也可以

拷贝到/opt目录下解压:

unzip instantclient-odbc-linux.x64-19.12.0.0.0dbru.zip

ls /opt/instantclient_19_13/

basic和odbc会解压到相同目录

测试:

ldd libsqora.so.21.1

解决依赖问题:

ln -s /opt/instantclient_19_13/libclntshcore.so.19.1  /opt/instantclient_19_13/libclntshcore.so.21.1

 ln -s /opt/instantclient_19_13/libclntsh.so.19.1  /opt/instantclient_19_13/lib

ln -s /usr/local/lib/libodbcinst.so.2.0.0 /opt/instantclient_19_13/libodbcinst.so.2clntsh.so.21.1

export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/opt/instantclient_19_13:/usr/lib64

2) DM端安装ODBC

拷贝到/opt目录下解压:

tar -zxvf unixODBC-2.3.9.tar.gz

cd unixODBC-2.3.9/

编译安装:

./configure

make && make install

验证:

odbcinst -j

3)配置ODBC数据源

3.1)配置tnsnames.ora

vim /opt/instantclient_19_13/network/admin/tnsnames.ora

DB10 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.136.106)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

  )

3.2)配置环境变量

vim /etc/profile

#结尾追加:

export TNS_ADMIN=/opt/instantclient_19_13/network/admin

source /etc/profile

3.3)配置odbcinst.ini

[root@localhost admin]# vim /usr/local/etc/odbcinst.ini

[Oracle ODBC1913]

Description     = Oracle ODBC Driver

Driver          = /opt/instantclient_21_4/libsqora.so.21.1

3.4) 配置odbc.ini

[root@localhost admin]# vim /usr/local/etc/odbc.ini

[ORA11]

DSN = ORA11

Driver = Oracle ODBC1913

ServerName = DB10

4)测试ODBC连接

[root@localhost instantclient_21_4]# isql -v ORA11 system tiger

SQL> select name from v$database;

5)拷贝以下文件到/dm/bin目录下(这个步骤非常关键)

[root@localhost ~]# cp /opt/unixODBC-2.3.9/DriverManager/.libs/libodbc.so /dm/bin

[root@localhost ~]# cp /opt/unixODBC-2.3.9/cur/.libs/libodbccr.so /dm/bin/

[root@localhost ~]# cp /opt/unixODBC-2.3.9/odbcinst/.libs/libodbcinst.so /dm/bin

[root@localhost ~]# chown -R dmdba:dinstall /dm

6)创建DBLINK

重启数据库服务

create or replace public link "LINK6" connect 'ODBC' with "TEST" identified by "dameng123" using 'ORA11';

完成创建

下面是一些测试过程:

被测数据库支持public dblink功能

SQL> create or replace public link link02 connect 'ORACLE' with TEST identified by "dameng123"  using '192.168.136.106/orcl';

SQL> conn UCAP/DAMENG123

SQL> select top 10 *from test1@link02;

源端Oracle数据库表结构发生变更(增加列或者删除列),在目标端使用dblink无感知,即在目标端通过查询语句能够直接查看到变更的列数据,无需重建dblink定义

oracle源端修改表结构,增加一列:执行

alter table test.test1 add  c int;

DM端查询,直接获取变更列数据:

SQL> select top 10 *from test1@link02;

 

被测数据库支持对源端Oracle数据表的同义词功能,即通过同义词即可访问源端数据表

SQL> create or replace synonym test_syn for test1@link02;

SQL> select top 10 *from test_syn;

被测数据库支持含有dblink的自定义函数

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值