大家好,這里是 Lucifer三思而后行,專注于提升數(shù)據(jù)庫(kù)運(yùn)維效率。
目錄
- 前言
- 一、環(huán)境準(zhǔn)備
- 二、實(shí)戰(zhàn)演示
- 三、最后總結(jié)
- 往期精彩文章
前言
從 Oracle 無法直接訪問 Mysql 數(shù)據(jù)庫(kù),需要配置透明網(wǎng)關(guān)后通過 DBLink 實(shí)現(xiàn)訪問。
今天搞了一下午透明網(wǎng)關(guān)配置,流程比較復(fù)雜,并且有一些坑,這不立刻來給大家排排坑,說不定以后就用的著呢!
廢話不多說,直接實(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 腳本一鍵安裝可參考:開源項(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 | 無 | 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)境下,無需重復(fù)安裝配置多個(gè)節(jié)點(diǎn)
?? 注意: 透明網(wǎng)關(guān)主機(jī)的配置不需要很高,無需安裝 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)盤供大家下載:
鏈接: 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 安裝圖形化界面!

稍許等待幾分鐘之后,即可配置完成,由于沒有上傳 DB 安裝包,這個(gè)報(bào)錯(cuò)是正常!
2.2、正式安裝
主機(jī)配置完成后,開始安裝透明網(wǎng)關(guān):
## 首先 root 用戶下,授權(quán) oracle 訪問 /soft 目錄
chown -R oracle:oinstall /soft
## 切換到 oracle 用戶下
su - oracle
## 解壓透明網(wǎng)關(guān)安裝包
unzip -q p13390677_112040_Linux-x86-64_5of7.zip
## 配置 vnc 訪問圖形化界面
vncserver

使用 VNC 客戶端連接:

開始安裝:



確認(rèn)安裝位置:


這里選擇 for ODBC 即可:


開始安裝,靜待結(jié)束:

root 用戶下執(zhí)行 root.sh 腳本:
/u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/11.2.0/db/root.sh

配置監(jiān)聽:


至此,透明網(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é)束了,接下來就是配置部分了。
3、透明網(wǎng)關(guān)配置
透明網(wǎng)關(guān)安裝好之后,自然是需要配置才能使用的。
3.1、配置 odbc.ini
odbc.ini 文件用來存放 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 需要訪問的用戶名;
- Password 是指被訪問用戶的登錄密碼;
- Database 是指需要 MySQL 數(shù)據(jù)庫(kù)需要被訪問的 DB 名稱;
?? 注意: 如果有多個(gè) MySQL 數(shù)據(jù)庫(kù)需要配置,則填寫多個(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)聽
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ù)需要配置,則寫成如下格式!
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)聽:
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ù)來連接透明網(wǎng)關(guān)。
4.1、配置 TNS
通過配置 TNS 來連接透明網(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

通過 tnsping 測(cè)試后,發(fā)現(xiàn)訪問沒有問題!
4.2、配置 DBLink 連接 MySQL 數(shù)據(jù)庫(kù)
接下來只需要?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)訪問 MySQL 就完成了!
三、最后總結(jié)
如果按照我的步驟來操作,整個(gè)流程走下來應(yīng)該會(huì)比較順暢,下面羅列一下我操作過程中遇到的一些報(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 字符集不正確或者沒有配置,應(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ū)分大小寫,而 Oracle 是不區(qū)分大小寫的:
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í),沒有加 (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)訪問MySQL數(shù)據(jù)庫(kù)
往期精彩文章
Oracle 一鍵巡檢自動(dòng)生成 Word 報(bào)告
Oracle 一鍵安裝合集
Oracle一鍵安裝腳本的 21 個(gè)疑問與解答
Oracle一鍵巡檢腳本的 21 個(gè)疑問與解答
全網(wǎng)首發(fā):Oracle 23ai 一鍵安裝腳本(非 RPM)
Oracle 19C 最新 RU 補(bǔ)丁 19.24 ,一鍵安裝!
Oracle Linux 7.9 一鍵安裝 Oracle 19C
RedHat 9.4(aarch64) 一鍵安裝 Oracle 19C
openEuler 22.03 LTS SP4 一鍵安裝 Oracle 19C RAC
RHEL 7.9 一鍵安裝 Oracle 19C 19.23 RAC
Oracle DataGuard GAP 修復(fù)手冊(cè)
優(yōu)化 Oracle:最佳實(shí)踐與開發(fā)規(guī)范
DBA 必備:Linux 軟件源配置全攻略
Linux 一鍵配置時(shí)鐘同步全攻略
感謝您的閱讀,這里是 Lucifer三思而后行,歡迎點(diǎn)贊+關(guān)注,我會(huì)持續(xù)分享數(shù)據(jù)庫(kù)知識(shí)、運(yùn)維技巧。




