Windows 註冊表中監聽器服務的 `ImagePath` 鍵值遺失或損毀,導致服務控制管理器 (SCM) 找不到 `tnslsnr.exe` 執行檔,進而無法啟動監聽器進程。
C:\> lsnrctl status
TNS-01103: 地址的協議專用組件指定不正確
TNS-12541: TNS:無監聽器
...
C:\> lsnrctl start
Failed to start service, error 3.
開啟 `services.msc`,找到 `OracleOraHome81TNSListener`,屬性中「執行檔路徑」為空白。
執行 regedit
定位至:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleOraHome81TNSListener
F:\Oracle\Ora81\BIN\TNSLSNR (請依實際 Oracle Home 路徑調整,必須指向 `tnslsnr.exe` 完整路徑)。在 `services.msc` 中右鍵啟動 `OracleOraHome81TNSListener`,應能正常啟動。
C:\> lsnrctl status
連接至 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=robust)(PORT=1521)))
LISTENER 的 STATUS
--------------------
別名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 8.1.6.0.0
啟動日期 ...
正常運行時間 0 天 0 小時 2 分 6 秒
服務摘要...
PLSExtProc (1 handler)
orc2 (1 handler)
orcl (2 handlers)
命令執行成功
SVRMGR> CONNECT INTERNAL/SYS@ORCL;
連接成功。
| 代碼 | 含義 | 典型原因 |
|---|---|---|
| TNS-01103 | 協議專用組件指定不正確 | listener.ora 格式錯誤、ImagePath 遺失、DLL 缺失 |
| TNS-12541 | 無監聽器 | 服務未啟動、端口被佔用、防火牆阻擋 |
| TNS-12560 | 協議適配器錯誤 | 網路層故障、驅動程式問題、ImagePath 錯誤 |
| Windows Error 3 | 系統找不到指定路徑 | ImagePath 指向不存在的路徑 |
| Windows Error 997 | I/O 作業重疊 | 服務啟動超時、相依服務未就緒 |