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

Oracle TNS 常見錯誤代碼完整排解手冊:ORA-12154、12541、12560、12514、1034 等核心錯誤診斷與修復

     編輯:Oracle 資料庫相關知識

TNS (Transparent Network Substrate) 是 Oracle 網路層核心,錯誤代碼繁多但成因可歸類。本文系統整理 10 大高頻 TNS 錯誤:代碼含義、根本原因、分步驟修復指令、驗證方法、預防措施,構建 DBA 必備的網路疑難排解速查手冊。

核心錯誤速查表

錯誤代碼簡述核心成因分類關鍵修復動作
ORA-12154 / TNS-12154無法解析連線識別符Client 端設定檢查 tnsnames.ora、TNS_ADMIN、sqlnet.ora NAMES.DIRECTORY_PATH
ORA-12541 / TNS-12541無監聽器Server 端 Listener啟動 Listener、檢查防火牆、listener.ora 設定
ORA-12514Listener 不知所請求服務服務註冊檢查 service_names、動態/靜態註冊、lsnrctl services
ORA-12560協定配接器錯誤網路/服務狀態檢查 DB 服務啟動、Listener 狀態、殺殭屍進程、重啟
ORA-1034Oracle not available資料庫狀態STARTUP MOUNT/OPEN、檢查 Alert Log
ORA-12500無法啟動專用伺服器進程伺服器進程檢查 PROCESSES 參數、作業系統限制、Listener 追蹤
ORA-12519無適當服務處理程序連線負載調整 PROCESSES/SESSIONS、啟用共享伺服器、負載平衡
TNS-01103協定專用組件指定不正確Listener 設定listener.ora ADDRESS 格式、HOST/IP、PORT
TNS-01169Listener 未識別口令Listener 安全lsnrctl set password、change_password

分錯誤詳細排解流程

1. ORA-12154 / TNS-12154:無法解析連線識別符

  1. 確認 tnsnames.ora 存在於 $ORACLE_HOME/network/admin 或 TNS_ADMIN 指定目錄。
  2. 檢查別名拼寫、格式 (括號配對、縮排不影響但利於閱讀):
    MYDB =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL=TCP)(HOST=192.168.1.10)(PORT=1521))
        (CONNECT_DATA = (SERVICE_NAME=orcl))
      )
    
  3. 檢查 sqlnet.ora 的 NAMES.DIRECTORY_PATH 包含 TNSNAMES:
    NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
    
  4. 執行 tnsping MYDB 驗證解析成功。
  5. 若使用 Easy Connect:sqlplus user/pwd@192.168.1.10:1521/orcl 繞過 tnsnames.ora。

2. ORA-12541 / TNS-12541:無監聽器

  1. Server 端執行 lsnrctl status 確認 Listener 狀態。
  2. 若未啟動:lsnrctl start;若啟動失敗參考 Listener 啟動失敗專節。
  3. 檢查防火牆:netstat -an | findstr 1521 (Windows) / ss -lntp | grep 1521 (Linux) 確認埠監聽。
  4. 驗證 listener.ora 的 HOST 設定:建議 0.0.0.0 或具體 IP,避免主機名解析問題。

3. ORA-12514:Listener 不知服務

  1. 執行 lsnrctl services 查看已註冊服務清單。
  2. 確認 SERVICE_NAME 與 Client 連線字串一致 (大小寫不敏感但建議一致)。
  3. 若服務顯示 UNKNOWN → 靜態註冊 (listener.ora SID_LIST);READY → 動態註冊 (PMON)。
  4. 動態註冊缺失:檢查 service_names、instance_name 參數、local_listener (非預設埠/多 Listener)。
  5. 靜態註冊補充:在 listener.ora SID_LIST 加入 SID_DESC。

4. ORA-12560:協定配接器錯誤 (頑固型)

  1. 確認 Oracle 資料庫服務已啟動:net start OracleServiceORCL (Windows) / systemctl status oracle-db (Linux)。
  2. 若服務啟動失敗:重建服務 oradim -delete -sid ORCL → oradim -new -sid ORCL,必要時重開機。
  3. 必殺技:殺掉殭屍進程 → 批次啟動腳本:
    # Windows ora_startup.bat
    taskkill /f /im oracle.exe
    taskkill /f /im oradim.exe
    net start OracleOraHome81TNSListener
    net start OracleServiceORCL
    # 如仍失敗:sqlplus / as sysdba → STARTUP
    

5. ORA-1034:Oracle not available

  1. 資料庫服務已啟動但實例未開啟 (MOUNT/CLOSE 狀態)。
  2. sqlplus / as sysdba → STARTUP 開啟資料庫。
  3. 若 STARTUP 掛起:檢查 Alert Log、鎖定檔 ($ORACLE_HOME/dbs/lk*)、共享記憶體段。

Listener 啟動失敗專項 (TNS-01103, TNS-12560, Error 3)

參考 Oracle Listener 監聽器無法啟動 7 步驟排解指南:核心為註冊表 ImagePath 修復。

診斷工具鏈

工具用途關鍵指令
tnspingClient 端解析驗證、Listener 連通性tnsping alias
lsnrctlListener 管理status, services, start, stop, trace
sqlplus / as sysdba資料庫實例管理STARTUP, SHUTDOWN, SHOW PARAMETER
netstat / ss作業系統埠狀態netstat -an | findstr 1521
Alert Log資料庫核心錯誤記錄tail -f $ORACLE_BASE/diag/rdbms/*/*/trace/alert_*.log
Listener Log連線嘗試、錯誤、服務註冊歷程$ORACLE_BASE/diag/tnslsnr/*/listener/trace/listener.log

預防性維護清單

  • ☐ Listener 密碼設定 + ADMIN_RESTRICTIONS=ON
  • ☐ service_names、instance_name 顯式設定,避免動態註冊失效
  • ☐ 非預設埠/多 Listener 設定 local_listener
  • ☐ 防火牆規則文件化、變更管控
  • ☐ 定期清理 Listener Log/Trace 避免磁碟滿
  • ☐ 監控 lsnrctl services 服務狀態 (READY/BLOCKED/UNKNOWN)
  • ☐ 連線字串統一使用 Service Name,棄用 SID

建立「錯誤代碼 → 成因分類 → 標準排解步驟 → 驗證指標」的肌肉記憶,能將 TNS 疑難排解時間從小時級壓縮至分鐘級。

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