Windows 環境下使用 sqlplus /nolog 或直接 sqlplus user/pass 時常遇到 ORA-12560: TNS:protocol adapter error。根因通常是作業系統層面未設定 ORACLE_SID 環境變數,導致無法識別本地實例。本文提供最快修復步驟與原理解析。
C:\> sqlplus scott/tiger
SQL*Plus: Release 11.2.0.4.0 Production
ERROR:
ORA-12560: TNS:protocol adapter error
ORACLE_SID 定位本地實例 (Bequeath 協議)orcl (安裝時指定)C:\> SET ORACLE_SID=orcl
C:\> sqlplus scott/tiger
SQL*Plus: Release 11.2.0.4.0 Production
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
SQL>
關鍵點:orcl 為實例名 (SID),而非 TNS 服務名、連線名或用戶名。可透過 services.msc 查看 OracleService 服務名確認。
Win+Pause → 進階系統設定 → 環境變數 → 系統變數 → 新增 ORACLE_SID=orclHKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_\ORACLE_SID SET ORACLE_SID=orcl| 現象 | 可能原因 | 對策 |
|---|---|---|
| ORA-12514 / ORA-12541 | Listener 未啟動或服務未註冊 | lsnrctl start、檢查 listener.ora、tnsnames.ora |
| ORA-01031 / ORA-01017 | 認證失敗 (密碼錯、權限不足) | 確認用戶/密碼、REMOTE_LOGIN_PASSWORDFILE |
| ORA-27101 / ORA-01034 | 實例未啟動 | sqlplus / as sysdba → STARTUP |
| 多實例環境 | SID 設錯 | 用 SET ORACLE_SID=正確SID |
# Linux 通常透過 .bash_profile 設定
export ORACLE_SID=orcl
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
# 登入後直接生效,無 ORA-12560 (Bequeath 協議在 Unix 原生支援良好)
設定 ORACLE_SID 是 Windows 連接本地 Oracle 的第一步,解決 90% 的 ORA-12560 問題。養成「先設 SID,再連線」的操作習慣,避免無謂排查。