ORA-12514: TNS:listener does not currently know of service requested in connect descriptor は、クライアントが指定した SERVICE_NAME を、接続先のOracleリスナーが認識していない時に発生する接続エラーです。ホスト名やポートへ到達できていても、リスナーに目的のサービスが登録されていないと接続できません。
Oracle公式の説明でも、接続要求で指定されたサービス名がリスナーに動的登録されていない、または listener.ora に静的構成されていないことが原因とされています。つまり、ORA-12514では「リスナーが起動しているか」だけでなく、「目的のサービス名をリスナーが知っているか」を確認します。
ORA-12514が出たら、まず
lsnrctl status でリスナーが認識しているサービス一覧を見ます。その一覧に、接続文字列の SERVICE_NAME がなければ、接続文字列のサービス名ミス、PDBサービス未起動、動的登録未完了、LOCAL_LISTENER 設定不備を疑います。最短チェック順
ORA-12514では、手当たり次第に設定ファイルを書き換える前に、次の順番で確認します。この順に見ると、接続文字列のミスなのか、リスナー登録の問題なのか、PDBの起動状態なのかを分けやすくなります。
1. 接続文字列を見る
SERVICE_NAME に何を指定しているか確認します。SIDと混同していないかも見ます。
2. リスナーのサービス一覧を見る
lsnrctl status の Services Summary に同じサービス名があるか確認します。
3. DB側のサービスを見る
SHOW PARAMETER service_names や DBA_SERVICES でDB側のサービス名を確認します。
4. PDBと動的登録を見る
PDBがOPENしているか、必要なら ALTER SYSTEM REGISTER で再登録されるか確認します。
ORA-12514とは
ORA-12514は、リスナーには到達できているものの、接続記述子で指定したサービス名が見つからない状態です。リスナー自体が起動していない場合は、別のエラーである ORA-12541: TNS:no listener になることが多いです。
接続エラーは似た番号が多いですが、ORA-12514では HOST や PORT よりも SERVICE_NAME とリスナー登録状態を見るのが近道です。Oracleネットワーク設定の全体像は ネットワーク設定の記事 も参考になります。
リスナーは起動している
lsnrctl status は返るが、目的のサービス名が一覧に出ていない状態です。
接続文字列にサービス名を書いている
SERVICE_NAME = orclpdb1 のような指定が、リスナー側のサービス一覧と一致していない可能性があります。
PDB接続で起きやすい
CDB/PDB環境では、PDBがOPENしていない、PDBサービスが起動していない、サービス名を間違えているケースがあります。
起動直後に出ることがある
DB起動直後、リスナーへの動的登録がまだ反映されていない場合があります。ALTER SYSTEM REGISTER で再登録を促せます。
まずlsnrctl statusでサービス一覧を見る
最初にサーバー側で lsnrctl status を実行し、リスナーが認識しているサービスを確認します。ここに接続したいサービス名がなければ、クライアント側の設定だけを直しても接続できません。
lsnrctl status # 例: Services Summary に目的のサービス名があるか確認する # Service "orclpdb1" has 1 instance(s).
リスナー確認の詳しい見方は リスナー確認の記事 を参照してください。リスナーが起動していない場合は リスナー起動の記事 が参考になります。
接続文字列のSERVICE_NAMEを確認する
次に、クライアント側の接続文字列を確認します。特に SID と SERVICE_NAME の混同、PDB名とサービス名の混同、古い tnsnames.ora の参照がよくあります。
ORCLPDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db.example.com)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orclpdb1)
)
)
sqlplus app_user/password@//db.example.com:1521/orclpdb1
tnsnames.ora の場所が分からない場合は、listener.oraの場所の記事 と合わせて、TNS_ADMIN やOracle Clientの参照先を確認します。接続識別子自体を解決できない場合は ORA-12154の記事 を参照してください。
DB側でサービス名を確認する
DBへログインできる管理者権限のセッションがある場合は、DB側で現在のサービス名を確認します。接続文字列のサービス名と、DBが提供しているサービス名が一致しているかを見ます。
SHOW PARAMETER service_names; SELECT name, network_name, pdb, enabled FROM dba_services ORDER BY name;
一般ユーザーで DBA_SERVICES が見られない場合は、DBAに確認してもらいます。PDB環境では、接続したいPDBがOPENしているかも重要です。
SHOW PDBS; SELECT name, open_mode FROM v$pdbs ORDER BY name;
ALTER SYSTEM REGISTERで再登録する
DB起動直後やリスナー再起動後に、サービスがまだリスナーへ登録されていない場合があります。その場合は、DB側からリスナーへの動的登録を促します。
ALTER SYSTEM REGISTER;
実行後にもう一度 lsnrctl status を確認し、目的のサービス名が表示されるかを見ます。それでも表示されない場合は、LOCAL_LISTENER、リスナーのホスト/ポート、DBの起動状態、PDBのOPEN状態を確認します。
LOCAL_LISTENERを確認する
動的登録がうまくいかない場合、DBの LOCAL_LISTENER 設定が実際のリスナーに合っていないことがあります。ホスト名変更、ポート変更、複数Oracle Home、コンテナ環境などでは特に注意します。
SHOW PARAMETER local_listener; ALTER SYSTEM SET local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=db.example.com)(PORT=1521))' SCOPE=BOTH; ALTER SYSTEM REGISTER;
LOCAL_LISTENER は接続全体に影響します。本番では、既存サービス、RAC/SCAN、複数リスナー、監視設定への影響を確認してから変更してください。PDBサービスでORA-12514が出る場合
CDB/PDB構成では、CDBへは接続できてもPDBサービスへ接続できないことがあります。PDBがMOUNTEDのまま、サービスが起動していない、接続文字列でCDBのサービス名を指定している、といったケースです。
ALTER PLUGGABLE DATABASE orclpdb1 OPEN; ALTER PLUGGABLE DATABASE orclpdb1 SAVE STATE; ALTER SYSTEM REGISTER;
ALTER SESSION SET CONTAINER = orclpdb1; SELECT name, network_name, enabled FROM dba_services ORDER BY name; ALTER SYSTEM REGISTER;
SAVE STATE を使うと、次回CDB起動時にPDBを自動的にOPENする運用にできます。ただし、環境や運用方針により起動制御が異なるため、DBAの方針に合わせてください。
listener.oraに静的登録するケース
通常は動的登録で十分ですが、DBが停止中でも管理接続したい、外部プロシージャや特殊構成がある、といった場合は listener.ora に静的登録することがあります。ただし、静的登録を増やすほど設定管理が複雑になるため、まず動的登録が正しく動くかを確認します。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orclpdb1)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = orcl)
)
)
listener.ora の場所や複数Oracle Homeの確認は listener.oraの場所の記事 も参考になります。
ログを確認する
ORA-12514が発生した時刻に、リスナーログへ接続要求の情報が残ることがあります。接続元、接続文字列、サービス名の手がかりを確認します。
lsnrctl status # listener.log または log.xml を確認する # ADR配下の diag/tnslsnr/<host>/<listener>/trace/listener.log など
リスナーログの場所と読み方は リスナーログの記事 を参照してください。
似た接続エラーとの違い
ORA-12514は、リスナーに到達した後、サービス名が見つからない状態です。接続エラーは発生段階で切り分けると分かりやすくなります。
ORA-12514
リスナーは応答していますが、指定したサービス名を認識していません。lsnrctl status のサービス一覧を確認します。
ORA-12154
接続識別子を解決できません。tnsnames.oraやTNS_ADMINを確認します。詳しくは ORA-12154の記事 を参照してください。
ORA-12541
リスナーに到達できない、またはリスナーが起動していない状態です。lsnrctl status やポート待受を確認します。
ORA-12560
TNSプロトコル・アダプタエラーです。Windowsローカル接続や環境変数、サービス状態で見ることがあります。詳しくは ORA-12560の記事 を参照してください。
ORA-03135
接続後に通信が失われた状態です。詳しくは ORA-03135の記事 を参照してください。
対応手順まとめ
lsnrctl statusで目的のサービス名が表示されるか確認する- 接続文字列の
SERVICE_NAMEとリスナーのサービス名を比較する SIDとSERVICE_NAMEを混同していないか確認する- PDB接続なら、PDBがOPENしているか確認する
- DB側で
SHOW PARAMETER service_namesとDBA_SERVICESを確認する ALTER SYSTEM REGISTERで動的登録を促す- 必要に応じて
LOCAL_LISTENERを確認する - リスナーログで接続要求のサービス名を確認する
ORA-12514は、リスナーやネットワーク全体が完全に壊れているというより、接続要求で指定したサービス名と、リスナーが認識しているサービス一覧がずれている時に起きやすいエラーです。まず lsnrctl status のサービス一覧と接続文字列を横に並べて確認してください。その上で、PDBのOPEN状態、動的登録、LOCAL_LISTENER、静的登録の要否を順に見ていくと、遠回りせずに原因へ近づけます。
よくある質問
リスナーは起動しているのにORA-12514になります
リスナー起動だけでは不十分です。目的の SERVICE_NAME が lsnrctl status のサービス一覧に表示されているか確認してください。
SIDで接続すれば直りますか?
環境によってはSID接続で通ることもありますが、PDBやサービス管理を使う構成では SERVICE_NAME 接続が基本です。アプリの接続先方針に合わせて統一してください。
ALTER SYSTEM REGISTERを実行しても出ます
PDBがOPENしていない、LOCAL_LISTENER が誤っている、接続先リスナーが違う、サービス名自体が違う可能性があります。リスナーのホスト・ポートとDB側設定を再確認します。
SQL DeveloperだけORA-12514になります
SQL Developerが参照している接続名、サービス名、Oracle Client、tnsnames.oraの場所が他ツールと違う可能性があります。Easy Connect形式で直接接続して切り分けると分かりやすいです。

