背景:本系統(tǒng)(oracle)需要獲取外圍系統(tǒng)(mysql)數(shù)據(jù)厉颤,考慮到使用和維護方便绩鸣,不使用ws或者rest接口怀大,采用DBLINK方式,但是雙方數(shù)據(jù)庫不同呀闻,需要安裝一些組件來實現(xiàn)Oracle訪問Mysql數(shù)據(jù)庫化借。
1.版本:
系統(tǒng)1:RedHat6.6 + Oracle Database 11g
系統(tǒng)2:MYSQL 5.7.30-0ubuntu0.18.04.1
2..安裝unixODBC
yum -y install unixODBC
2.2 測試:odbcinst -j
3. 安裝mysqlOdbc
cd /opt/soft
wget https://downloads.mysql.com/archives/get/p/10/file/mysql-connector-odbc-8.0.21-1.el6.x86_64.rpm
rpm -ivh mysql-connector-odbc-8.0.21-1.el6.x86_64.rpm
4. 配置ODBC.ini
vim /etc/odbc.ini
Driver寫mysqlOdbc的地址,server,port,user,password分別寫MYsql鏈接的信息
4.2測試odbc鏈接mysql
isql dg4odb -v
5.配置ORacle通過DBlink訪問Mysql
su - oracle
vi .bash_profile
export ODBCINI=/etc/odbc.ini
source .bash_profile
cd $ORACLE_HOME/network/admin
vim listener.ora
添加如下信息:
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=dg4odbc)
(ORACLE_HOME=/home/DB/oracle/product/11.2.0.4) # 本機oracleHOME
(PROGRAM=dg4odbc)
)
)
vim tnsnames.ora
添加如下信息:
dg4odbc =
(DESCRIPTION=
(ADDRESS = (PROTOCOL =TCP)(HOST = 127.0.0.1)(PORT = 1521)) # 本機IP
(CONNECT_DATA =
(SID = dg4odbc)
)
(HS=OK)
)
5.2配置odbc監(jiān)聽
cd $ORACLE_HOME/hs/admin
vim initdg4odbc.ora
添加如下信息:
HS_FDS_CONNECT_INFO=dg4odb
HS_FDS_TRACE_LEVEL = on
HS_FDS_SHAREABLE_NAME=/usr/lib64/libodbc.so
HS_FDS_SUPPORT_STATISTICS=FALSE
HS_LANGUAGE="simplified chinese_china.al32utf8" #提供具有非oracle數(shù)據(jù)源的字符集捡多、語言和區(qū)域信息的異構(gòu)服務(wù)
HS_NLS_NCHAR=UCS2 #NVARCHAR/NCHAR和圖形數(shù)據(jù)類型通常以Unicode格式存儲數(shù)據(jù)蓖康。unicode字符集因數(shù)據(jù)庫的不同而不同,設(shè)置此參數(shù)外部數(shù)據(jù)庫保持一致
set ODBCINI=/etc/odbc.ini
6.重啟測試監(jiān)聽配置
su - oracle
lsnrctl stop
lsnrctl start
lsnrctl status;
tnsping dg4odbc
7.創(chuàng)建DBLINK
su - oracle
sqlplus / as sysdba
alter system register;(數(shù)據(jù)庫中執(zhí)行)
drop public database link testMysql;
create public database link testMysql connect to "USER" identified by "PASSWORD" using 'dg4odbc';
select count(1) from "mysql_test_view"@testMysql ;
PS執(zhí)行后踩了一些坑:
??? 1.因為mysql大小寫敏感铐炫,視圖名需要帶引號
??? 2.mysql的視圖中同時出現(xiàn)varchar2和text會出錯,需要轉(zhuǎn)換text為其他類型钓瞭,或者把varchar2換成varchar
??? 3.mysql的日期類型到oracle會出錯驳遵,需要轉(zhuǎn)換成字符串