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

Oracle ORA-12560 TNS 協議適配器錯誤:Windows 環境變數 ORACLE_SID 缺失排查實錄

     編輯:Oracle 資料庫相關知識

在 Windows 執行 exp/imp 或 sqlplus 時出現 ORA-12560: TNS:protocol adapter error,雖然監聽器與實例均已啟動。本文記錄真實排查過程,證實根因為 **Windows 環境變數 ORACLE_SID 未設定或錯誤**,而非註冊表或監聽器問題。

錯誤現象

EXP-00056: 遇到 ORACLE 錯誤 12560
ORA-12560: TNS: 協議適配器錯誤
EXP-00000: 導出終止失敗

排查邏輯

  1. 確認監聽器 lsnrctl status 正常、實例 sqlplus / as sysdba 可連線
  2. 註冊表 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_<Home>\ORACLE_SID 值正確 (orc)
  3. Linux 下靠環境變數 ORACLE_SID 連線,Windows 同理
  4. 在 CMD 設定 SET ORACLE_SID=orc 後 exp 立即正常
  5. 改為錯誤值 SET ORACLE_SID=orcs 再現錯誤,改回即恢復

根因結論

Windows 下 Oracle 客戶端工具 (exp/imp/sqlplus) **優先讀取進程環境變數 ORACLE_SID**,若未設定則嘗試讀取註冊表。若兩者不一致或皆缺失,即拋出 ORA-12560。

永久解決方案

方法一:系統環境變數 (推薦)

  1. 右鍵「此電腦」→ 內容 → 進階系統設定 → 環境變數
  2. 系統變數區 新增:ORACLE_SID = 您的實例名 (如 orc)
  3. 重新開啟 CMD 驗證

方法二:登錄表修正

路徑:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_\ORACLE_SID
值:實例名 (需與資料庫實際 SID 一致)

驗證指令

-- CMD 中檢查當前生效 SID
ECHO %ORACLE_SID%

-- tnsping 測試連線
TNSPING <服務名>

-- 實際測試 exp/imp
EXP user/pass@服務名 FILE=test.dmp FULL=Y

延伸提醒

  • 多實例環境:每個 CMD 視窗 SET ORACLE_SID=xxx 切換實例
  • 腳本自動化:在 .bat/.cmd 開頭強制 SET ORACLE_SID=...
  • 若同時設定 LOCAL 環境變數 (TNS_ADMIN 別名),優先級高於 ORACLE_SID
核心觀念:ORA-12560 在本機連線場景 90% 以上為 ORACLE_SID 未正確傳遞給 Oracle 客戶端庫,而非網路/監聽器故障。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved