前言
從 Oracle 無(wú)法直接訪問(wèn) Mysql 數(shù)據(jù)庫(kù),需要配置透明網(wǎng)關(guān)后通過(guò) DBLink 實(shí)現(xiàn)訪問(wèn)。
今天搞了一下午透明網(wǎng)關(guān)配置,流程比較復(fù)雜,并且有一些坑,這不立刻來(lái)給大家排排坑,說(shuō)不定以后就用的著呢!
廢話不多說(shuō),直接實(shí)戰(zhàn)走起~
一、環(huán)境準(zhǔn)備
本次環(huán)境準(zhǔn)備了 3 臺(tái)主機(jī),分別是 Oracle 數(shù)據(jù)庫(kù),MySQL 數(shù)據(jù)庫(kù),透明網(wǎng)關(guān)。
?? Linux 主機(jī)安裝教程可參考:實(shí)戰(zhàn)篇:VMware Workstation 虛擬機(jī)安裝 Linux 系統(tǒng) ?? Oracle 單機(jī)安裝教程可參考:實(shí)戰(zhàn)篇:Linux 安裝 Oracle 11GR2 數(shù)據(jù)庫(kù)保姆級(jí)教程 ?? Oracle RAC 安裝教程可參考:實(shí)戰(zhàn)篇:一步步教你 Linux 7 安裝 Oracle 11GR2 RAC ?? Oracle 腳本一鍵安裝可參考:開(kāi)源項(xiàng)目:Install Oracle Database By Scripts! ?? MySQL 安裝教程可參考:實(shí)戰(zhàn)篇:手把手教你Linux安裝Mysql(細(xì)致入微)
?? Oracle 安裝包合集和補(bǔ)丁下載地址:2021年Oracle第三季度補(bǔ)丁合集
環(huán)境信息:
用途 主機(jī)名 IP地址 主機(jī)版本 數(shù)據(jù)庫(kù)版本 DB名稱 端口號(hào) Oracle 數(shù)據(jù)庫(kù) orcl 10.211.55.100 RHEL7.6 11GR2 orcl 1521 MySQL 數(shù)據(jù)庫(kù) mysql 10.211.55.101 RHEL7.6 8.0.26 lucifer 3306 透明網(wǎng)關(guān)主機(jī) gateway 10.211.55.102 RHEL7.6 11GR2 無(wú) 1521
為什么透明網(wǎng)關(guān)需要單獨(dú)配置一臺(tái)主機(jī)?
不影響數(shù)據(jù)庫(kù)主機(jī)的正常運(yùn)行 便于安裝配置以及管理 數(shù)據(jù)庫(kù)遷移時(shí)不需要重新配置透明網(wǎng)關(guān) RAC 環(huán)境下,無(wú)需重復(fù)安裝配置多個(gè)節(jié)點(diǎn)
📢 注意: 透明網(wǎng)關(guān)主機(jī)的配置不需要很高,無(wú)需安裝 Oracle 數(shù)據(jù)庫(kù),僅安裝透明網(wǎng)關(guān)即可!
二、實(shí)戰(zhàn)演示
1、介質(zhì)裝備
首先,需要下載 GateWay 和 MySQL ODBC安裝包:
mysql-connector-odbc-8.0.27-1.el7.x86_64.rpm p13390677_112040_Linux-x86-64_5of7.zip
方便大家學(xué)習(xí),我直接上傳到百度網(wǎng)盤(pán)供大家下載:
鏈接: https://pan.baidu.com/s/1ybJGu1JCbOgRbjCTqtl9TA
提取碼: l062
2、安裝透明網(wǎng)關(guān)
2.1、主機(jī)環(huán)境配置
下載上述安裝介質(zhì)并上傳透明網(wǎng)關(guān)主機(jī):
📢 注意: 安裝透明網(wǎng)關(guān)之前需要配置環(huán)境和創(chuàng)建用戶等等,可以參照 Linux 安裝單機(jī) Oracle 的環(huán)境配置步驟,這里就不再詳述了!
使用 Oracle 一鍵安裝腳本配置即可:
cd /soft
./OracleShellInstall.sh -i 10.211 .55.102 -txh Y
📢 注意: 由于主機(jī)安裝時(shí)選擇了最小化安裝,并且安裝透明網(wǎng)關(guān)需要圖形化,因此加上 -txh Y
安裝圖形化界面!
稍許等待幾分鐘之后,即可配置完成,由于沒(méi)有上傳 DB 安裝包,這個(gè)報(bào)錯(cuò)是正常!
2.2、正式安裝
主機(jī)配置完成后,開(kāi)始安裝透明網(wǎng)關(guān):
## 首先 root 用戶下,授權(quán) oracle 訪問(wèn) /soft 目錄
chown -R oracle:oinstall /soft
## 切換到 oracle 用戶下
su - oracle
## 解壓透明網(wǎng)關(guān)安裝包
unzip -q p13390677_112040_Linux-x86-64_5of7.zip
## 配置 vnc 訪問(wèn)圖形化界面
vncserver
使用 VNC 客戶端連接:
開(kāi)始安裝:
確認(rèn)安裝位置:
這里選擇 for ODBC
即可:
開(kāi)始安裝,靜待結(jié)束:
root
用戶下執(zhí)行 root.sh
腳本:
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/11.2.0/db/root.sh
配置監(jiān)聽(tīng):
至此,透明網(wǎng)關(guān)安裝結(jié)束!
2.3、安裝 mysql-connector
首先需要安裝 unixODBC
依賴,否則報(bào)錯(cuò):
安裝 unixODBC
依賴后安裝 mysql-connector
:
yum install -y unixODBC*
rpm -ivh mysql-connector-odbc-8.0.27-1.el7.x86_64.rpm
📢 注意: 透明網(wǎng)關(guān)的安裝到這里就全都結(jié)束了,接下來(lái)就是配置部分了。
3、透明網(wǎng)關(guān)配置
透明網(wǎng)關(guān)安裝好之后,自然是需要配置才能使用的。
3.1、配置 odbc.ini
odbc.ini
文件用來(lái)存放 MySQL 數(shù)據(jù)庫(kù)相關(guān)信息,默認(rèn)不存在,root
用戶下手動(dòng)創(chuàng)建即可:
cat<< EOF> /etc/odbc.ini
[ lucifer]
Description = ODBC for MySQL
Driver = /usr/lib64/libmyodbc8w.so
Server = 10.211 .55.101
Port = 3306
User = lucifer
Password = lucifer
Database = lucifer
EOF
配置文件中的配置信息如下:
[lucifer] 可以理解為是一個(gè) SID 名稱,可以自定義,后面配置需要用到;Server 是指 MySQL 數(shù)據(jù)庫(kù)主機(jī)的 IP 地址;Port 是指 MySQL 數(shù)據(jù)庫(kù)的端口;User 是指 Oracle 需要訪問(wèn)的用戶名;Password 是指被訪問(wèn)用戶的登錄密碼;Database 是指需要 MySQL 數(shù)據(jù)庫(kù)需要被訪問(wèn)的 DB 名稱;
📢 注意: 如果有多個(gè) MySQL 數(shù)據(jù)庫(kù)需要配置,則填寫(xiě)多個(gè)即可!
[ lucifer]
Description = ODBC for MySQL
Driver = /usr/lib64/libmyodbc8w.so
Server = 10.211 .55.101
Port = 3306
User = lucifer
Password = lucifer
Database = lucifer
[ lucifer1]
Description = ODBC for MySQL
Driver = /usr/lib64/libmyodbc8w.so
Server = 10.211 .55.105
Port = 3306
User = lucifer1
Password = lucifer1
Database = lucifer1
3.2、配置 init[SID].ora
切換至 oracle
用戶,進(jìn)入 $ORACLE_HOME/hs/admin
目錄下,新建一個(gè) init[SID].ora 文件:
cat<< EOF> $ORACLE_HOME /hs/admin/initlucifer.ora
##HS Configuration
HS_FDS_CONNECT_INFO = lucifer
HS_FDS_TRACE_LEVEL = debug
HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
HS_FDS_SUPPORT_STATISTICS = FALSE
HS_LANGUAGE = AMERICAN_AMERICA.UTF8
HS_NLS_NCHAR = UCS2
##ODBC Configuration
set ODBCINI = /etc/odbc.ini
EOF
這里 initSID.ora 中的 SID 名稱和文件中 HS_FDS_CONNECT_INFO 參數(shù)值,就是上一步中我們配置 odbc.ini 文件中的 [lucifer]
名稱。
📢 注意: 如果有多個(gè) MySQL 數(shù)據(jù)庫(kù)需要配置,則創(chuàng)建多個(gè) init[SID].ora 文件 即可!
3.3、配置監(jiān)聽(tīng)
oracle 用戶下,進(jìn)入 $TNS_ADMIN
配置 listener.ora 文件:
cat<< EOF>> $TNS_ADMIN /listener.ora
SID_LIST_LISTENER =
( SID_LIST =
( SID_DESC=
( SID_NAME= lucifer)
( ORACLE_HOME= /u01/app/oracle/product/11.2.0/db)
( PROGRAM= dg4odbc)
)
)
EOF
📢 注意: 如果有多個(gè) MySQL 數(shù)據(jù)庫(kù)需要配置,則寫(xiě)成如下格式!
cat<< EOF>> $TNS_ADMIN /listener.ora
SID_LIST_LISTENER =
( SID_LIST =
( SID_DESC =
( SID_NAME = lucifer)
( ORACLE_HOME= /u01/app/oracle/product/11.2.0/db)
( PROGRAM= dg4odbc)
)
( SID_DESC =
( SID_NAME = lucifer1)
( ORACLE_HOME= /u01/app/oracle/product/11.2.0/db)
( PROGRAM= dg4odbc)
)
)
EOF
重啟監(jiān)聽(tīng):
lsnrctl stop
lsnrctl start
lsnrctl status
配置完成之后,測(cè)試是否可以連接 MySQL 數(shù)據(jù)庫(kù):
isql lucifer
成功連接 MySQL 數(shù)據(jù)庫(kù),至此透明網(wǎng)關(guān)配置完成!
4、Oracle 數(shù)據(jù)庫(kù)配置
透明網(wǎng)關(guān)配置完成后,就只需要配置 Oracle 數(shù)據(jù)庫(kù)來(lái)連接透明網(wǎng)關(guān)。
4.1、配置 TNS
通過(guò)配置 TNS 來(lái)連接透明網(wǎng)關(guān),進(jìn)入 TNS 配置文件目錄 $TNS_ADMIN
配置 TNS:
cat<< EOF>> $TNS_ADMIN /tnsnames.ora
lucifer =
( DESCRIPTION =
( ADDRESS_LIST =
( ADDRESS = ( PROTOCOL = TCP) ( HOST = 10.211 .55.102) ( PORT = 1521 ))
)
( CONNECT_DATA =
( SID = lucifer)
)
( HS = OK)
)
EOF
通過(guò) tnsping
測(cè)試后,發(fā)現(xiàn)訪問(wèn)沒(méi)有問(wèn)題!
4.2、配置 DBLink 連接 MySQL 數(shù)據(jù)庫(kù)
接下來(lái)只需要?jiǎng)?chuàng)建你 DBLink 即可連接 MySQL 數(shù)據(jù)庫(kù):
create public database link lucifer connect to "lucifer" identified by "lucifer" using 'lucifer' ;
測(cè)試連接操作 MySQL 數(shù)據(jù)庫(kù):
select * from "lucifer" @lucifer order by "id" ;
delete from "lucifer" @lucifer where "id" = 1 ;
至此,整個(gè) Oracle 配置透明網(wǎng)關(guān)訪問(wèn) MySQL 就完成了!
三、最后總結(jié)
如果按照我的步驟來(lái)操作,整個(gè)流程走下來(lái)應(yīng)該會(huì)比較順暢,下面羅列一下我操作過(guò)程中遇到的一些報(bào)錯(cuò):
1、init[sid].ora 配置文件的 HS_FDS_SHAREABLE_NAME = /usr/lib64/libodbc.so
不正確,應(yīng)該是 ODBC 的 Lib包:
ERROR at line 1 :
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
ORA-02063: preceding line from DLK
2、init[sid].ora 里配置的 HS_LANGUAGE=AMERICAN_AMERICA.zhs16gbk
字符集不正確或者沒(méi)有配置,應(yīng)該是 Oracle
數(shù)據(jù)庫(kù)字符集:
ERROR at line 1 :
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[
3、執(zhí)行查詢操作時(shí),表名需要帶雙引號(hào),因?yàn)?MySQL 默認(rèn)表名是區(qū)分大小寫(xiě),而 Oracle 是不區(qū)分大小寫(xiě)的:
ERROR at line 1 :
ORA-00942: table or view does not exist
[ MySQL] [ ODBC 8.0 ( w) Driver] [ mysqld-5.7.18-log] Table 'test.T1' doesn't exist
{ 42S02,NativeErr = 1146 }
ORA-02063: preceding 2 lines from DLK
4、Oracle 數(shù)據(jù)庫(kù)配置 TNS 時(shí),沒(méi)有加 (HS = OK)
:
ERROR at line 1 :
ORA-28546: connection initialization failed, probable Net8 admin error
ORA-02063: preceding line from LUCIFER
本文部分內(nèi)容參考文檔:Oracle透明網(wǎng)關(guān)訪問(wèn)MySQL數(shù)據(jù)庫(kù)