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

Oracle 單一監聽器服務多個資料庫實例配置全攻略

     編輯:Oracle 資料庫相關知識

一個 Oracle 監聽器(Listener)可同時為多個資料庫實例(SID/Service)提供服務,無需建立多個監聽器埠。本文以圖文並茂方式示範 Net Configuration Assistant / Net Manager 圖形化配置、手動編輯 listener.ora、tnsnames.ora 兩大核心檔案,並說明多版本共存、字元集差異等決策考量。

架構概念

  • 一個監聽器(預設埠 1521)
  • 多個 SID_LIST 條目,各對應一個資料庫實例
  • 客戶端 tnsnames.ora 定義多個服務名稱,分別指向同一 Host:Port 不同 SERVICE_NAME

步驟一:配置監聽器

  1. 啟動 Net Configuration Assistant → Listener 配置 → 新增/修改 → 埠號 1521 → 完成。
  2. 或用 Net Manager:Local → Listeners → LISTENER → Listening Locations → Add Address (TCP, Host, 1521)。

步驟二:在監聽器註冊多個資料庫(SID_LIST)

Net Manager:Local → Listeners → LISTENER → Database Services → Add Database → 填入 Global Database Name(= SERVICE_NAME)、SID Name、Oracle Home。

listener.ora 完整範例(兩個實例 ORASUN、ORAGCE)

# listener.ora
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = harry)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = D:\DATABASE\Oracle81)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = ORASUN)
      (ORACLE_HOME = D:\DATABASE\Oracle81)
      (SID_NAME = ORASUN)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = ORAGCE)
      (ORACLE_HOME = D:\DATABASE\Oracle81)
      (SID_NAME = ORAGCE)
    )
  )

關鍵:GLOBAL_DBNAME 對應客戶端連線字串中的 SERVICE_NAME。

步驟三:客戶端 tnsnames.ora 定義多個服務名稱

# tnsnames.ora
SMEST =
  (DESCRIPTION =
    (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))
    (CONNECT_DATA = (SERVICE_NAME = ORAGCE))
  )

SMEDI =
  (DESCRIPTION =
    (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))
    (CONNECT_DATA = (SERVICE_NAME = ORASUN))
  )

INST1_HTTP =
  (DESCRIPTION =
    (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))
    (CONNECT_DATA = (SERVER = SHARED)(SERVICE_NAME = ORAGCE)(PRESENTATION = https://admin))
  )

驗證連線

tnsping SMEST
tnsping SMEDI
sqlplus user/pass@SMEST
sqlplus user/pass@SMEDI

決策指南:何時需要多個資料庫 vs 多個綱要

情境建議
多應用共用同字元集、同版本單一資料庫,建立多個使用者/表空間隔離
字元集不同(如 BIG5 vs GB2312 vs UTF8)分離資料庫實例(字元集建庫後不可變)
需不同 Oracle 版本(如 8i + 9i + 11g)分離 Oracle Home,各自監聽器埠(如 1521/1522/1523)
嚴格資安隔離、獨立備份窗口、不同 SLA分離實例

多版本共存注意事項

  • 環境變數 ORACLE_HOME、PATH 分別指向各自 Home。
  • 登錄表 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 下以 HOME0, HOME1... 區隔,互不衝突。
  • 各版本監聽器使用不同埠,或單一監聽器註冊多版本 SID(需相容性測試)。

修改配置後必須重新載入

lsnrctl reload
# 或
lsnrctl stop && lsnrctl start

進階:一個監聽器服務內網與外網(雙網卡)

在 listener.ora 的 DESCRIPTION_LIST 加入兩個 ADDRESS,分別綁定內網 IP 與外網 IP,同一埠或不同埠均可。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved