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

Oracle 單機雙實例雙 Listener 衝突解決:IPC KEY 唯一性原則

     編輯:Oracle 資料庫相關知識

故障現場

  • 單一 AIX 主機運行兩個實例:o8161 (8.1.6) / o8151 (8.1.5)
  • 啟動第一個 Listener 正常,啟動第二個報錯:

$ lsnrctl start
TNS-01106: Listener using listener name LISTENER has already been started

根因分析:IPC KEY 衝突

兩個 listener.ora 的 **IPC 協議 KEY 值相同** (預設 EXTPROC0),AIX 核心層面 **KEY 全系統唯一**,第二個 Listener 綁定失敗。

原始配置 (衝突)


# o8161 listener.ora (未修改)
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)))
      (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = loopback)(PORT = 1521)))
    )
  )

# o8151 listener.ora (衝突)
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)))  -- 衝突!
      (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = loopback)(PORT = 1526)))
    )
  )

解決方案:修改 KEY 值唯一化


# o8151 listener.ora (修正後)
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = TESTo815)))  -- 唯一 KEY
      (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = loopback)(PORT = 1526)))
    )
  )

驗證步驟


# 1. 停止所有 Listener
lsnrctl stop LISTENER_o8161
lsnrctl stop LISTENER_o8151

# 2. 分別啟動 (指定 listener.ora 路徑)
lsnrctl start LISTENER_o8161
lsnrctl start LISTENER_o8151

# 3. 確認狀態
lsnrctl status LISTENER_o8161
lsnrctl status LISTENER_o8151

最佳實踐:標準化命名規範

實例Listener 名稱IPC KEYTCP PORT
o8161LISTENER_O8161EXTPROC_O81611521
o8151LISTENER_O8151EXTPROC_O81511526
prodLISTENER_PRODEXTPROC_PROD1521
testLISTENER_TESTEXTPROC_TEST1522
**原則**:Listener Name、IPC KEY、TCP PORT 三者皆唯一,命名包含實例識別碼,避免人為疏失。

延伸:12c+ 多租戶 (CDB/PDB) 場景

  • CDB 層級單一 Listener 服務所有 PDB (透過 SERVICE_NAME=pdb_name 路由)。
  • 若 PDB 需隔離網路/安全域,可建立 **專屬 Listener** 並設定 LOCAL_LISTENER 參數指向。
  • IPC KEY 衝突風險依然存在,命名規範同樣適用。

結語

單機多實例/多 Listener 部署,**IPC KEY 唯一性是鐵律**。採用「實例名+用途」命名慣例,配合自動化部署腳本驗證,可徹底杜絕 TNS-01106 衝突。記住:lsnrctl status 看不到衝突,**啟動第二個才會報錯**,預防勝於治療。

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