天天看點

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

DM8資料庫的DBLINK功能(OCI方式及ODBC方式)

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

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

[ro[email protected] ~]# cat /etc/ld.so.conf.d/oracle-instantclient.conf

/opt/oracle/instantclient_19_13

[[email protected] ~]# ldconfig

配置LD_LIBRARY_PATH環境變量

修改dmdba使用者下的.bash_profile檔案,添加如下内容:

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

生效:

[[email protected] ~]$ source .bash_profile

重新開機DM資料庫完成。

建立dblink:

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

DM8資料庫的DBLINK功能(OCI方式及ODBC方式)

 方式二: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

DM8資料庫的DBLINK功能(OCI方式及ODBC方式)

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

[[email protected] 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

[[email protected] admin]# vim /usr/local/etc/odbc.ini

[ORA11]

DSN = ORA11

Driver = Oracle ODBC1913

ServerName = DB10

4)測試ODBC連接配接

[[email protected] instantclient_21_4]# isql -v ORA11 system tiger

SQL> select name from v$database;

DM8資料庫的DBLINK功能(OCI方式及ODBC方式)

5)拷貝以下檔案到/dm/bin目錄下(這個步驟非常關鍵)

[[email protected] ~]# cp /opt/unixODBC-2.3.9/DriverManager/.libs/libodbc.so /dm/bin

[[email protected] ~]# cp /opt/unixODBC-2.3.9/cur/.libs/libodbccr.so /dm/bin/

[[email protected] ~]# cp /opt/unixODBC-2.3.9/odbcinst/.libs/libodbcinst.so /dm/bin

[[email protected] ~]# chown -R dmdba:dinstall /dm

6)建立DBLINK

重新開機資料庫服務

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

完成建立

DM8資料庫的DBLINK功能(OCI方式及ODBC方式)

下面是一些測試過程:

被測資料庫支援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 [email protected];

DM8資料庫的DBLINK功能(OCI方式及ODBC方式)

源端Oracle資料庫表結構發生變更(增加列或者删除列),在目标端使用dblink無感覺,即在目标端通過查詢語句能夠直接檢視到變更的列資料,無需重建dblink定義

oracle源端修改表結構,增加一列:執行

alter table test.test1 add  c int;

DM端查詢,直接擷取變更列資料:

SQL> select top 10 *from [email protected];

DM8資料庫的DBLINK功能(OCI方式及ODBC方式)

被測資料庫支援對源端Oracle資料表的同義詞功能,即通過同義詞即可通路源端資料表

SQL> create or replace synonym test_syn for [email protected];

SQL> select top 10 *from test_syn;

DM8資料庫的DBLINK功能(OCI方式及ODBC方式)

被測資料庫支援含有dblink的自定義函數

DM8資料庫的DBLINK功能(OCI方式及ODBC方式)