首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 監聽器 Listener.ora 與 TNSNAMES.ORA 配置範本與常見問題速查

     編輯:Oracle 資料庫基礎

`listener.ora`、`tnsnames.ora` 格式敏感且易出錯,建議建立標準範本備份,部署時複製修改。Linux 環境下 `sqlnet.ora` 常導致問題,可直接刪除或重命名。Windows 下 Listener 服務啟動失敗,可直接執行 `$ORACLE_HOME/bin/lsnrctl.exe` 保持視窗開啟作為臨時解法。

Server 端 Listener.ora 範本

單一 Instance

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
      )
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = database1)          # 資料庫 Instance 名稱
      (ORACLE_HOME = /opt/oracle/product/10.1.0)  # 安裝路徑,依實際調整
      (PROGRAM = extproc)
    )
  )

雙 Instance

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
      )
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = database1)
      (ORACLE_HOME = /opt/oracle/product/10.1.0)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = database2)          # 第二個 Instance 名稱
      (ORACLE_HOME = /opt/oracle/product/10.1.0)
      (PROGRAM = extproc)
    )
  )

Listener 管理命令

lsnrctl start      # 啟動
lsnrctl stop       # 停止
lsnrctl status     # 查看狀態 (含服務註冊狀態)
lsnrctl services   # 詳細服務/處理程序資訊
lsnrctl reload     # 重載配置 (無需重啟)

Client 端 TNSNAMES.ORA 範本

ORALOCAL =                                    # 連線別名
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = database1)              # 服務名 / SID
      # (SID = database1)                     # 10g 以前用 SID,11g+ 建議 SERVICE_NAME
    )
  )

連線測試命令

tnsping ORALOCAL        # 測試別名解析與連通性
sqlplus user/pwd@ORALOCAL  # 實際連線測試

常見問題速查表

錯誤/現象可能原因排查步驟
ORA-12514: Listener does not currently know of service requestedSERVICE_NAME/SID 拼寫錯誤、Instance 未向 Listener 註冊1. `lsnrctl services` 確認已註冊服務名
2. 檢查 `local_listener` 參數
3. `ALTER SYSTEM REGISTER;` 強制註冊
ORA-12541: TNS:no listenerListener 未啟動、埠號錯誤、防火牆阻擋1. `lsnrctl status` 確認運行
2. `netstat -an | grep 1521` 確認埠監聽
3. 防火牆開放 1521
ORA-12154: TNS:could not resolve the connect identifierTNSNAMES.ORA 路徑錯誤、別名拼寫錯誤、TNS_ADMIN 環境變數未設1. 確認 `tnsping 別名` 失敗
2. 檢查 `TNS_ADMIN` 指向正確目錄
3. 使用絕對路徑測試
Linux: 連線閒置中斷`sqlnet.ora` 參數 `SQLNET.EXPIRE_TIME` / 防火牆閒置超時1. 設定 `SQLNET.EXPIRE_TIME=10` (分鐘)
2. 調整防火牆/負載平衡器閒置逾時
Windows: 服務啟動失敗權限不足、路徑含空格、多 Oracle Home 衝突1. 以管理員身份執行 `lsnrctl.exe`
2. 檢查 `ORACLE_HOME` 環境變數
3. 使用 `ORACLE_HOME\bin\lsnrctl` 完整路徑

最佳實務建議

  1. 統一使用 **SERVICE_NAME** 而非 SID (支援 RAC、Data Guard 服務切換)
  2. Listener.ora 僅定義監聽位址,**SID_LIST 僅用於靜態註冊** (外部程序、舊版本);現代版本依賴 PMON 動態註冊
  3. 建立標準化範本納入版控,部署透過腳本替換變數 (HOST、SID、ORACLE_HOME)
  4. 定期 `lsnrctl services` 檢查服務註冊狀態,納入監控腳本
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved