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-12514 | Listener 不知所請求服務 | 服務註冊 | 檢查 service_names、動態/靜態註冊、lsnrctl services |
| ORA-12560 | 協定配接器錯誤 | 網路/服務狀態 | 檢查 DB 服務啟動、Listener 狀態、殺殭屍進程、重啟 |
| ORA-1034 | Oracle 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-01169 | Listener 未識別口令 | Listener 安全 | lsnrctl set password、change_password |
tnsnames.ora 存在於 $ORACLE_HOME/network/admin 或 TNS_ADMIN 指定目錄。MYDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL=TCP)(HOST=192.168.1.10)(PORT=1521))
(CONNECT_DATA = (SERVICE_NAME=orcl))
)
sqlnet.ora 的 NAMES.DIRECTORY_PATH 包含 TNSNAMES:
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
tnsping MYDB 驗證解析成功。sqlplus user/pwd@192.168.1.10:1521/orcl 繞過 tnsnames.ora。lsnrctl status 確認 Listener 狀態。lsnrctl start;若啟動失敗參考 Listener 啟動失敗專節。netstat -an | findstr 1521 (Windows) / ss -lntp | grep 1521 (Linux) 確認埠監聽。listener.ora 的 HOST 設定:建議 0.0.0.0 或具體 IP,避免主機名解析問題。lsnrctl services 查看已註冊服務清單。SERVICE_NAME 與 Client 連線字串一致 (大小寫不敏感但建議一致)。UNKNOWN → 靜態註冊 (listener.ora SID_LIST);READY → 動態註冊 (PMON)。service_names、instance_name 參數、local_listener (非預設埠/多 Listener)。listener.ora SID_LIST 加入 SID_DESC。net start OracleServiceORCL (Windows) / systemctl status oracle-db (Linux)。oradim -delete -sid ORCL → oradim -new -sid ORCL,必要時重開機。# Windows ora_startup.bat
taskkill /f /im oracle.exe
taskkill /f /im oradim.exe
net start OracleOraHome81TNSListener
net start OracleServiceORCL
# 如仍失敗:sqlplus / as sysdba → STARTUP
sqlplus / as sysdba → STARTUP 開啟資料庫。$ORACLE_HOME/dbs/lk*)、共享記憶體段。參考 Oracle Listener 監聽器無法啟動 7 步驟排解指南:核心為註冊表 ImagePath 修復。
| 工具 | 用途 | 關鍵指令 |
|---|---|---|
| tnsping | Client 端解析驗證、Listener 連通性 | tnsping alias |
| lsnrctl | Listener 管理 | 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 |
ADMIN_RESTRICTIONS=ONservice_names、instance_name 顯式設定,避免動態註冊失效local_listenerlsnrctl services 服務狀態 (READY/BLOCKED/UNKNOWN)建立「錯誤代碼 → 成因分類 → 標準排解步驟 → 驗證指標」的肌肉記憶,能將 TNS 疑難排解時間從小時級壓縮至分鐘級。