Oracle に接続しようとすると突然表示される ORA-12560: TNS: プロトコル・アダプタ・エラー。「昨日まで動いていたのに」「インストール直後から繋がらない」など、さまざまな場面で遭遇するこのエラーは、原因が複数あり、OS(Windows/Linux)によって対処法が異なるためハマりやすい代表的なエラーです。
本記事では ORA-12560 の発生メカニズムから、原因別・OS別の解決手順をチェックリスト形式で解説します。
この記事で解決できること
- ORA-12560 が発生する6つの主な原因と見分け方
- Windows・Linux それぞれの解決手順
- ORACLE_SID・ORACLE_HOME 環境変数の設定方法
- Oracle サービス・リスナーの起動確認と復旧
- ローカル接続と TNS 接続の使い分け
- 再発防止のための設定チェックリスト
ORA-12560 とは
ORA-12560(TNS: プロトコル・アダプタ・エラー)は、クライアントが Oracle データベースに接続しようとしたが、プロトコルレベルで通信を確立できなかったときに発生します。
ERROR: ORA-12560: TNS:protocol adapter error
エラーの本質は「通信経路(プロトコル・アダプタ)が応答しない」ことです。接続方式(ローカル IPC / TCP/IP)によって原因が異なります。
| 接続方式 | 使うプロトコル | ORA-12560 の主原因 |
|---|---|---|
| sqlplus / as sysdba(ローカル) | Bequeath(IPC) | Oracle サービス停止・ORACLE_SID 不一致 |
| sqlplus user/pass@TNS名 | TCP/IP(TNS) | リスナー停止・tnsnames.ora の設定ミス |
原因一覧と確認の順番
ORA-12560 が発生したら、以下の順で原因を確認します。
| 順番 | 確認項目 | 対象OS |
|---|---|---|
| ① | Oracle サービス(OracleServiceXXX)が起動しているか | Windows |
| ② | ORACLE_SID 環境変数が正しいか | Windows/Linux |
| ③ | ORACLE_HOME 環境変数が正しいか | Windows/Linux |
| ④ | リスナー(listener)が起動しているか(TNS接続の場合) | Windows/Linux |
| ⑤ | tnsnames.ora の接続文字列が正しいか(TNS接続の場合) | Windows/Linux |
| ⑥ | Oracle インストールが正常か(権限・パス) | Windows/Linux |
原因① Oracle サービスが起動していない(Windows)
Windows では Oracle データベースは Windows サービスとして動作します。このサービスが停止していると ORA-12560 が発生します。
確認方法
:: サービス一覧からOracle関連を確認 sc query | findstr /I "Oracle" :: または特定サービスの状態確認 sc query OracleServiceORCL
STATE : STOPPED と表示されている場合はサービスが停止しています。
解決手順
:: サービスを起動(管理者権限で実行) net start OracleServiceORCL :: サービス名が分からない場合は確認 sc query type= all state= all | findstr /I "oracle"
または「サービス」アプリ(services.msc)から OracleServiceXXX(XXX はSID名)を探して手動起動します。
自動起動の設定(再発防止)
PC再起動のたびにサービスが止まる場合は、スタートアップの種類を「自動」に変更します。
sc config OracleServiceORCL start= auto
(= の後にスペースが必要です)
原因② ORACLE_SID が正しく設定されていない
ORACLE_SID は接続先データベースのインスタンス名です。この値が間違っていると、ローカル接続で ORA-12560 が発生します。
現在の ORACLE_SID を確認する
-- Windows echo %ORACLE_SID% -- Linux/Mac echo $ORACLE_SID
正しい SID 名を調べる
-- Windows: レジストリまたはサービス名から確認 :: サービス名 OracleServiceXXXX の XXXX が SID 名 sc query | findstr /I "OracleService" -- Linux: oratab から確認 cat /etc/oratab
ORACLE_SID を設定する
-- Windows(一時設定) set ORACLE_SID=ORCL -- Windows(永続設定:管理者権限が必要) setx ORACLE_SID ORCL /M :: /M はシステム環境変数として設定。ユーザー環境変数なら /M を省略 -- Linux(一時設定) export ORACLE_SID=ORCL -- Linux(永続設定:~/.bash_profile に追記) echo 'export ORACLE_SID=ORCL' >> ~/.bash_profile source ~/.bash_profile
原因③ ORACLE_HOME が正しく設定されていない
ORACLE_HOME が誤っているか未設定の場合、Oracle の実行ファイルやライブラリが見つからず ORA-12560 が発生することがあります。
確認と設定
-- Windows echo %ORACLE_HOME% -- 例: C:\app\oracle\product\19.0.0\dbhome_1 -- Linux echo $ORACLE_HOME -- 例: /u01/app/oracle/product/19.0.0/dbhome_1
-- Windows(永続設定) setx ORACLE_HOME "C:\app\oracle\product\19.0.0\dbhome_1" /M setx PATH "%PATH%;%ORACLE_HOME%\bin" /M -- Linux(~/.bash_profile) export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH
複数の Oracle バージョンが入っている場合は特に注意
Oracle 11g と 19c など複数バージョンが同一マシンに入っていると、ORACLE_HOME が古いバージョンを指している場合があります。
sqlplus -V でバージョンを確認し、接続先と一致しているか確認してください。
原因④ リスナーが起動していない(TNS接続の場合)
TNS 名(@ORCL など)を指定した接続では、Oracle リスナーが動作している必要があります。リスナーが停止していると ORA-12560 が発生します。
リスナーの状態確認
lsnrctl status
正常時の出力例:
LSNRCTL for 64-bit Windows: Version 19.0.0.0.0 Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for 64-bit Windows: Version 19.0.0.0.0 Start Date 13-MAR-2026 09:00:00 Uptime 0 days 1 hr. 23 min. 10 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File ... Listener Log File ... Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))) Services Summary... Service "ORCL" has 1 instance(s).
リスナーが停止している場合の起動
lsnrctl start :: または特定のリスナー名を指定 lsnrctl start LISTENER
Windows でリスナーをサービスとして自動起動
:: サービス名確認(バージョンによって名前が異なる) sc query | findstr /I "Listener" :: 例: OracleOraDB19Home1TNSListener (19c) :: OracleOraDb12Home1TNSListener (12c) :: 自動起動設定(確認したサービス名を指定) sc config OracleOraDB19Home1TNSListener start= auto net start OracleOraDB19Home1TNSListener
原因⑤ tnsnames.ora の設定ミス(TNS接続の場合)
TNS 名で接続する場合、tnsnames.ora の記述が正しくないと接続できません。
tnsnames.ora の場所
-- Windows %ORACLE_HOME%\network\admin\tnsnames.ora -- Linux $ORACLE_HOME/network/admin/tnsnames.ora
tnsnames.ora の正しい記述例
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
よくある設定ミス
| ミス | 症状 | 修正方法 |
|---|---|---|
| HOST が間違っている | 接続先が見つからない | IP アドレスまたは正しいホスト名に修正 |
| PORT が違う(デフォルト1521) | ポートで弾かれる | リスナーの実際のポートを確認して修正 |
| SERVICE_NAME と SID の混在 | 間違ったインスタンスに接続 | SERVICE_NAME(推奨)か SID か統一する |
| インデントがズレている | パース失敗 | スペース数を揃える(タブは使用不可) |
tnsping で疎通確認
tnsping ORCL -- 正常時 Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))...) OK (10 msec) -- NG の場合は HOST・PORT・SERVICE_NAME を再確認
原因⑥ 権限・インストール問題(Linux)
Linux 環境では、Oracle の実行ファイルに対する権限や、OS グループ(dba グループ)の設定が原因になることがあります。
確認事項
# oracle ユーザーで実行しているか確認 whoami # → oracle と表示されるべき # dba グループに所属しているか確認 id oracle # → groups に dba が含まれていることを確認 # Oracle インスタンスが起動しているか確認 ps -ef | grep pmon # → ora_pmon_ORCL のようなプロセスが存在するか確認
インスタンスを起動する(Linux)
# oracle ユーザーに切り替え su - oracle # ORACLE_SID を設定 export ORACLE_SID=ORCL # sqlplus で sysdba 接続してインスタンス起動 sqlplus / as sysdba SQL> STARTUP -- Oracle インスタンスは以下の順で起動します: -- NOMOUNT : パラメータファイルを読み込み、インスタンス起動 -- MOUNT : 制御ファイルを読み込み、データベースをマウント -- OPEN : データファイルを開いて通常接続可能な状態に -- -- STARTUP(引数なし)= OPEN まで一気に起動 -- 正常起動後: -- Database opened.
接続方法別の診断フロー
ローカル接続(@ なし)で ORA-12560 が出る場合
sqlplus / as sysdba -- または sqlplus sys/password as sysdba
| ステップ | 確認内容 | コマンド |
|---|---|---|
| 1 | ORACLE_SID が正しいか | echo %ORACLE_SID%(Win)/ echo $ORACLE_SID(Linux) |
| 2 | Oracle サービスが起動しているか | sc query OracleServiceORCL(Win)/ ps -ef | grep pmon(Linux) |
| 3 | インスタンスを起動 | net start OracleServiceORCL(Win)/ STARTUP(sqlplus内・Linux) |
TNS 接続(@TNS名 あり)で ORA-12560 が出る場合
sqlplus user/pass@ORCL
| ステップ | 確認内容 | コマンド |
|---|---|---|
| 1 | tnsping が通るか | tnsping ORCL |
| 2 | リスナーが起動しているか | lsnrctl status |
| 3 | リスナーを起動 | lsnrctl start |
| 4 | tnsnames.ora の記述確認 | HOST/PORT/SERVICE_NAME を再確認 |
| 5 | ファイアウォール・ポート確認 | Test-NetConnection hostname -Port 1521(PowerShell)または telnet hostname 1521(要機能有効化) |
再発防止チェックリスト
| 設定項目 | Windows | Linux |
|---|---|---|
| ORACLE_SID を永続設定 | システム環境変数 or setx |
~/.bash_profile に export |
| ORACLE_HOME を永続設定 | システム環境変数 or setx |
~/.bash_profile に export |
| Oracle サービス自動起動 | sc config ... start= auto |
dbstart を /etc/rc.local に追加、または systemd |
| リスナー自動起動 | OracleXXXTNSListener を「自動」に | lsnrctl start を起動スクリプトに追加 |
| tnsnames.ora バックアップ | 変更前にコピーを保管 | 変更前にコピーを保管 |
よくある質問(FAQ)
❓ sqlplus / as sysdba でも ORA-12560 が出る。何が原因? (クリックで開閉)
sqlplus / as sysdba はローカル IPC 接続のため、リスナーは不要です。この場合の原因はほぼ以下の2つです。
- ORACLE_SID が未設定または間違っている:
echo %ORACLE_SID%(Windows)やecho $ORACLE_SID(Linux)で確認してください - Oracle サービス(Windows)またはインスタンス(Linux)が停止している:Windows は
sc query OracleServiceXXX、Linux はps -ef | grep pmonで確認
❓ ORA-12560 と ORA-12541 の違いは? (クリックで開閉)
ORA-12560(TNS: プロトコル・アダプタ・エラー)は、ローカル接続や TNS 接続でプロトコルレベルの通信が確立できない場合に発生します。ORACLE_SID 不一致やサービス停止が主原因です。
ORA-12541(TNS: no listener)は、TNS 接続でリスナーに到達できるが、リスナーが起動していない場合に発生します。lsnrctl start で解決します。
TNS 接続で ORA-12560 が出る場合は ORACLE_SID / ORACLE_HOME の設定を先に確認し、ORA-12541 が出る場合はリスナーの起動を優先確認してください。
❓ Windows で OracleService は起動しているのに ORA-12560 が出る (クリックで開閉)
サービスは起動していても、以下の原因で ORA-12560 が発生することがあります。
- ORACLE_SID がサービス名のSID部分と一致していない:サービス名
OracleServiceORCLなら ORACLE_SID はORCL - 複数バージョンの Oracle がインストールされており、PATH が古いバージョンを指している:
sqlplus -Vでバージョン確認 - Oracle サービスが起動途中(まだインスタンスが OPEN になっていない):起動ログを確認、または少し待つ
❓ Linux で oracle ユーザー以外から sqlplus を実行するとエラーになる (クリックで開閉)
Linux では Oracle のローカル接続(/ as sysdba)は oracle ユーザー、または dba グループのユーザーのみが実行できます。
# oracle ユーザーに切り替えて実行 su - oracle sqlplus / as sysdba # または別ユーザーを dba グループに追加 usermod -aG dba username
追加後はログインし直して反映させてください。
❓ tnsping は通るのに sqlplus で ORA-12560 が出る (クリックで開閉)
tnsping が通る(リスナーには届く)が sqlplus で ORA-12560 が出る場合、次を確認してください。
- Oracle インスタンスが OPEN になっていない:リスナーは起動していてもインスタンス自体が起動していない場合。
lsnrctl statusで Service Summary にインスタンスが表示されているか確認 - SERVICE_NAME ではなく SID で接続しており、SID が間違っている:tnsnames.ora の CONNECT_DATA を確認
- ファイアウォールが IANA 以外のポートをブロック:Oracle の動的ポートを確認
まとめ:ORA-12560 解決フロー
| 接続方式 | 確認順序 | 主な解決方法 |
|---|---|---|
| ローカル接続 (@ なし) |
① ORACLE_SID → ② Oracle サービス/インスタンス → ③ ORACLE_HOME | set ORACLE_SID=ORCL → net start OracleServiceORCL |
| TNS接続 (@TNS名) |
① tnsping → ② リスナー → ③ tnsnames.ora → ④ インスタンス起動 | lsnrctl start → tnsnames.ora 修正 |
| Linux 環境 | ① oracle ユーザーか確認 → ② 環境変数 → ③ pmon プロセス | su - oracle → export ORACLE_SID=ORCL → STARTUP |
ORA-12560 は原因が多岐にわたりますが、「ローカル接続か TNS 接続か」を切り分けてから確認手順を絞ることで、素早く解決できます。上記のチェックリストを上から順に確認することで、ほとんどのケースで解消できます。