首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle HSODBC 接入 MySQL 完整配置實戰:Linux 環境下的異構數據庫連接

     編輯:MySQL 資料庫相關知識

Oracle Database Gateway (HSODBC) 連接 MySQL 全流程實戰

利用 Oracle Heterogeneous Services (HS) 透過 ODBC 連接 MySQL,實現 Oracle 直接查詢 MySQL 數據(DBLink 方式)。本文基於 CentOS 4.4 + Oracle 10g + MySQL 5.1 環境,記錄完整安裝配置步驟與遺留問題。

一、環境準備

  • OS:CentOS 4.4 (Linux 2.6.9)
  • Oracle:10.2.0.1.0 Enterprise Edition(已安裝)
  • MySQL:5.1.34-community (Windows,IP: xxx.xxx.xxx.xxx:3306)

二、軟體安裝

# 1. unixODBC(root)
rpm -Uvh unixODBC-2.2.12-1.el4s1.1.i386.rpm

# 2. MySQL ODBC Driver(root)
rpm -Uvh mysql-connector-odbc-5.1.5-0.i386.rpm

# 3. Oracle Gateway(oracle 用戶)
unzip 10201_gateways_linux32.zip
cd gateways && ./runInstaller
# 安裝路徑與 Oracle DB 共用同一 ORACLE_HOME

三、ODBC 配置 (/etc/odbc.ini)

[DSName]
Driver = /usr/lib/libmyodbc5.so
Description = MySQL
Server = xxx.xxx.xxx.xxx
Port = 3306
User = root
UID = root
Password = mypass
Database = mysqldbname
Option = 3
Socket =
charset = utf8

測試: isql -v DSName root mypass 成功顯示 Connected!。

四、Gateway 配置

1. $ORACLE_HOME/hs/admin/initDSName.ora

HS_FDS_CONNECT_INFO = DSName
HS_FDS_TRACE_LEVEL = 0
HS_FDS_SHAREABLE_NAME = /usr/lib/libmyodbc5.so

2. listener.ora 添加 SID_DESC

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC = (SID_NAME=PLSExtProc) (ORACLE_HOME=...) (PROGRAM=extproc))
    (SID_DESC = (GLOBAL_DBNAME=BOSS) (ORACLE_HOME=...) (SID_NAME=BOSS))
    (SID_DESC = (SID_NAME=phpcms) (ORACLE_HOME=...) (PROGRAM=hsodbc))  -- 關鍵:PROGRAM=hsodbc
  )

3. tnsnames.ora 添加服務

DSName =
  (DESCRIPTION =
    (ADDRESS_LIST = (ADDRESS = (PROTOCOL=TCP)(HOST=192.168.0.125)(PORT=1521)))
    (CONNECT_DATA = (SERVICE_NAME=DSName))
    (HS = OK)  -- 關鍵:標識異構服務
  )

4. 重載監聽並驗證

lsnrctl reload
lsnrctl service
# 應看到 Service "DSName" has 1 instance(s), status UNKNOWN, handler DEDICATED
tnsping DSName  # OK

五、建立 DBLink 並測試

CREATE PUBLIC DATABASE LINK linkname
CONNECT TO "root" IDENTIFIED BY ""
USING 'DSName';

-- 測試查詢
SELECT "name" FROM t1@linkname;

六、遺留問題與規避方案

問題現象原因/規避
字符集亂碼中文顯示異常Oracle 與 MySQL 均建議使用 AL32UTF8 / utf8mb4,NLS_LANG 設置一致
TEXT/BLOB 欄位報錯 ORA-28500 / 1064查詢 text 欄位失敗MySQL ODBC 驅動對長文本處理有缺陷。
方案:
1. 視圖轉換 CAST(text_col AS CHAR(1000))
2. 升級 DataDirect ODBC(需 MySQL Enterprise)
3. 應用層分離查詢,避免跨 DBLink 查長文本

七、生產環境建議

  1. 網路層:Oracle 與 MySQL 部署同 VPC,啟用 SSL 加密傳輸。
  2. 權限最小化:DBLink 用戶僅授予 SELECT 權限。
  3. 監控告警:監聽器狀態、DBLink 查詢延遲、錯誤率。
  4. 替代方案評估:Oracle GoldenGate、Kafka Connect、應用層雙寫 可能更穩健。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved