Oracle Database接続時に発生する「ORA-12514: TNS: リスナーは接続記述子で要求されたサービスを現在認識していません」は、クライアントが指定したサービス名(SERVICE_NAME)をリスナーが把握していない場合に発生します。本記事では、このエラーの発生原因を網羅し、解決のための具体的な手順と確認ポイントを徹底解説します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
ORA-12514の結論・最短解決手順
ORA-12514が発生した際は、以下のステップを順に確認してください。
- 簡易接続(EZConnect)での確認:
tnsnames.oraの不備を切り分けるため、ホスト名とサービス名直打ちで接続を試す。 - リスナーの状態確認: サーバー側で
lsnrctl statusまたはlsnrctl servicesを実行し、サービスが登録されているか確認する。 - サービス名の完全一致確認: ドメイン名が含まれる場合は、ドメイン名まで含めて正確に記述されているか確認する。
- インスタンス・PDBの状態確認: データベースおよびプラガブル・データベース(PDB)が OPEN 状態であることを確認する。
ORA-12514とは?エラーの背景と基礎
ORA-12514は、ネットワーク通信の「窓口」であるリスナーが、クライアントから要求されたサービス名(SERVICE_NAME)を自身の管理リストに見つけられない時に返されるエラーです。
[oracle@v19single ~]$ sqlplus system/oracle@v19single:1521/v19
SQL*Plus: Release 19.0.0.0.0 - Production on 土 4月 4 23:34:43 2026
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
ERROR:
ORA-12514: TNS:
リスナーは接続記述子でリクエストされたサービスを現在認識していません
- KW1: ORA-12514(クライアント側に表示されるエラー)
- KW2: TNS-12514(リスナーログ
listener.logに出力される識別番号)
公式ドキュメントによる定義
原因: リスナーが、データベースまたは他のサービスとの接続を確立するための要求を受信した。リスナーが受信した接続記述子には、リスナーに動的に登録されていないか、リスナーに対して静的に構成されていないサービス(通常はデータベース・サービス)の名前が指定されていました。これはリスナーが起動した後、データベース・インスタンスがリスナーに登録されるまでの間に発生した場合など、一時的な状況と考えられます。
データベース・エラー・メッセージ – ORA-12500からORA-12699
初心者向けメモ:サービス名とドメイン
19c以降の環境では、サービス名に DBドメイン(例:.example.com)が付与されていることが一般的です。リスナーは「完全修飾されたサービス名」で識別するため、ドメインの有無が異なると ORA-12514 が発生します。
ORA-12514が発生する主な場面(事例集)
実務でこのエラーに遭遇する代表的なケースを網羅しました。
1. tnsnames.ora でのサービス名指定ミス
最も多いのが、SERVICE_NAME = v19 と書くべきところを、スペルミスしたり、ドメイン名(例:v19.example.com)を省略したりするケースです。
なお、tnsnames.ora ファイルはデフォルトで $ORACLE_HOME/network/admin ディレクトリ配下に格納されています。
2. PDB(プラガブル・データベース)がクローズしている
マルチテナント構成において、PDB が MOUNTED 状態のままだと、その PDB 専用のサービスはリスナーに公開されません。
3. 動的登録のラグ(最大60秒)
DB起動直後、バックグラウンドプロセス(LREG)がリスナーに情報を通知するまでには数十秒かかります。この「登録待ち」の間に接続するとエラーになります。
確実な動的登録のため、運用上は 「リスナー起動 → DB起動」の順番 で起動させることが推奨されます(DB起動時にリスナーが待ち構えている状態が理想です)。
4. リスナーのポート番号不一致
リスナーがデフォルトの 1521 以外で待機している場合、DB側の LOCAL_LISTENER パラメータが未設定だと、DBはリスナーの居場所がわからずサービスを登録できません。
手順・実装:切り分けと修正方法
ステップ1:簡易接続(EZConnect)で原因の切り分け
tnsnames.ora の設定ミスか、DB側の問題かを切り分けるため、以下の形式で接続を試してください。
# 書式: sqlplus ユーザー名/パスワード@ホスト名:ポート番号/サービス名
sqlplus system/password@v19single:1521/v19
注釈: > * ホスト名「v19single」で名前解決ができない場合は、IPアドレスを直接指定してください。
- 重要: サービス名にドメインが付いている場合(例:
v19.jp.oracle.com)は、必ずドメイン名まで含めて入力してください。
- これで繋がる場合:
tnsnames.oraの記述内容(SERVICE_NAME や括弧の構成)に誤りがあります。 - これでも ORA-12514 になる場合: リスナー側にサービス
v19が認識されていません。
ステップ2:公式ドキュメントに基づく処置
エラー解消のために以下の確認を行ってください。
- しばらく待機: データベース起動直後の場合は、登録が完了するまでもう一度接続を試行します。
- リスナーサービスの確認:
lsnrctl services リスナー名を実行し、現在どのサービスを実行しているか確認します。 - パラメータの再確認:
SERVICE_NAMEパラメータが、リスナーが認識しているサービスと一致しているか確認します。 - ログの確認:
listener.logファイルのイベントを確認し、拒否された履歴を調査します。
実行例:正しい接続設定
ホスト名 v19single、サービス名 v19 を使用した tnsnames.ora の例です。
# tnsnames.ora の例
# デフォルト配置: $ORACLE_HOME/network/admin/tnsnames.ora
V19_CONNECTION =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = v19single)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = v19) # ドメインがある場合は v19.example.com のように全記する
)
)
補足: サービス名は SQL> show parameter service_names で出力される値を一字一句違わずに転記するのが最も確実です。
トラブルシューティング:代表的 ORA-エラーとの比較
| エラーコード | 原因 | 対処法 |
| ORA-12514 | リスナーは応答したが、サービス名がリストにない | 簡易接続で確認、ドメイン名の確認 |
| ORA-12541 | リスナーが起動していない | サーバーで lsnrctl start を実行 |
| ORA-12154 | tnsnames.ora 内にその接続識別子がない | TNS名のスペルチェック、ファイルの場所確認 |
運用・監視上の注意
- 起動順序の遵守: DBを先に起動してしまった場合は、
ALTER SYSTEM REGISTER;コマンドで即時登録を促すことが可能です。 - ドメイン名の自動付加:
sqlnet.oraのNAMES.DEFAULT_DOMAINが設定されていると、意図せずサービス名の末尾にドメインが付与されて不一致が起きる場合があります。 - PDBの自動起動: CDBを再起動してもPDBが自動で開くよう、
ALTER PLUGGABLE DATABASE v19 SAVE STATE;を実行しておきましょう。
FAQ(よくある質問)
Q1: サービス名にドメインが付いているか確認する方法は?
A1: DB内で SHOW PARAMETER DB_DOMAIN を確認するか、lsnrctl status の出力結果に表示されるサービス名のフルネームを確認してください。
Q2: 簡易接続で繋がったのに、TNS接続だと失敗します。
A2: tnsnames.ora の SERVICE_NAME 指定にドメインが抜けているか、スペルミスがある可能性が高いです。簡易接続で成功した文字列をそのままコピーして設定してください。
Q3: 1521ポート以外を使いたい場合は?
A3: tnsnames.ora の PORT を変更するだけでなく、DB側の LOCAL_LISTENER パラメータにリスナーの場所を教えてあげる必要があります。
まとめ
- ORA-12514 は、クライアントが要求したサービス名をリスナーが認識していない状態。
- 解決への近道は、簡易接続(EZConnect) を使って設定ファイルの不備を切り分けること。
- サービス名にドメインがついている場合は、必ず ドメイン名まで含めて 記述する。
- 起動トラブルを防ぐため、「リスナーを先に、DBを後に」 起動する習慣をつける。
本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント