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

Oracle Listener 監聽器無法啟動 7 步驟排解指南:註冊表 ImagePath 修復實戰

     編輯:Oracle 資料庫相關知識

Windows 環境下 Oracle Listener 服務啟動失敗、錯誤代碼 3 (路徑不存在)、TNS-01103 協定配接器錯誤,多數源於註冊表 ImagePath 遺失或損毀。本文提供 7 步驟標準排解流程,從症狀確認到註冊表修復、服務驗證、Listener 啟動全記錄。

故障現場症狀

C:\> lsnrctl start
啟動 tnslsnr:請稍候...
Failed to start service, error 3.
TNS-12536: TNS:作業可能會被阻礙
TNS-12560: TNS:協定配接器錯誤
TNS-00506: 作業可能阻塞

# 服務管理員 (services.msc)
啟動 OracleOraHome81TNSListener 失敗
錯誤 3:系統找不到指定的路徑
服務可執行檔路徑為空白

7 步驟排解流程

  1. 確認 Listener 可執行檔實際路徑:
    dir %ORACLE_HOME%\bin\tnslsnr.exe
    # 例:F:\Oracle\Ora81\bin\tnslsnr.exe
    
  2. 開啟註冊表編輯器:regedit → 導航至:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleOraHome81TNSListener
    
    (服務名稱依安裝 Home 而異,如 OracleOraHome92TNSListener、OracleOraDb11g_home1TNSListener)
  3. 檢查 ImagePath 值:右側面板尋找 ImagePath (資料類型 REG_EXPAND_SZ 可展開字串值)。常見問題:值遺失、或路徑錯誤、或引號缺失。
  4. 修正/新增 ImagePath:
    • 若遺失:右鍵 → 新增 → 可展開字串值 → 名稱 ImagePath。
    • 數值資料填入完整路徑 (含引號若路徑有空白):
      F:\Oracle\Ora81\bin\tnslsnr
      # 或
      "C:\Program Files\Oracle\product\19.0.0\dbhome_1\bin\tnslsnr"
      
  5. 啟動 Windows 服務:services.msc → 找到同名服務 → 啟動 → 應顯示「正在執行」。
  6. 啟動 Listener 並驗證:
    C:\> lsnrctl start
    TNS-01106: 使用名稱 LISTENER 的監聽器已經啟動
    
    C:\> lsnrctl status
    連接至 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=...)(PORT=1521)))
    LISTENER 的 STATUS
    ...
    服務摘要...
    PLSExtProc 具有 1 個服務處理程序
    orcl 具有 1 個服務處理程序
    命令執行成功
    
  7. 驗證資料庫連線:
    SVRMGR> connect internal/sys@orcl
    連接成功。
    

根因分析

  • Oracle 安裝/解除安裝/修補過程中,註冊表 ImagePath 被誤刪或未正確寫入。
  • 多 ORACLE_HOME 並存時,服務名稱衝突導致錯誤 Home 的路徑被寫入。
  • 手動移動 Oracle Home 目錄未同步更新註冊表。

預防與最佳實務

  • 安裝多個 Home 時,使用不同服務名稱前綴 (Oracle 10g+ 自動處理)。
  • 修補/升級後,驗證所有 Oracle 服務 ImagePath 正確。
  • 使用 srvctl (RAC) 或 oradim 管理服務,避免手動編輯註冊表。
  • 將此排解流程納入 DBA Runbook,包含註冊表路徑範本、常見服務名稱對照表。

延伸:Listener.ora 關鍵設定檢查

# listener.ora
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))  -- 0.0.0.0 監聽所有介面
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)      # 服務名
      (ORACLE_HOME = F:\Oracle\Ora81)
      (SID_NAME = orcl)           # 實例名
    )
  )

ADMIN_RESTRICTIONS_LISTENER = ON  # 防止遠程修改 Listener 設定

Listener 是資料庫對外服務的大門,服務啟動失敗直接導致所有遠程連線中斷。掌握註冊表 ImagePath 修復技巧,能在 5 分鐘內恢復服務,避免長時間業務中斷。

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