【Oracle】ORA-12560: TNS プロトコル・アダプタ・エラーの原因と解決方法|Windows・Linux対応

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_profileexport
ORACLE_HOME を永続設定 システム環境変数 or setx ~/.bash_profileexport
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つです。

  1. ORACLE_SID が未設定または間違っているecho %ORACLE_SID%(Windows)や echo $ORACLE_SID(Linux)で確認してください
  2. 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=ORCLnet start OracleServiceORCL
TNS接続
(@TNS名)
① tnsping → ② リスナー → ③ tnsnames.ora → ④ インスタンス起動 lsnrctl start → tnsnames.ora 修正
Linux 環境 ① oracle ユーザーか確認 → ② 環境変数 → ③ pmon プロセス su - oracleexport ORACLE_SID=ORCLSTARTUP

ORA-12560 は原因が多岐にわたりますが、「ローカル接続か TNS 接続か」を切り分けてから確認手順を絞ることで、素早く解決できます。上記のチェックリストを上から順に確認することで、ほとんどのケースで解消できます。