Oracleデータベースに接続しようとしたときに表示される
「ORA-12514: TNS:listener does not currently know of service requested in connect descriptor」 エラー。
初めて遭遇すると「何が原因なの?」と戸惑いますよね。
この記事では、ORA-12514エラーの意味・主な原因・確認ポイント・具体的な対処方法を、初心者にもわかりやすく解説します。
◆ ORA-12514エラーとは?
エラーメッセージ全文:
これは簡単に言うと、クライアント側が接続しようとしているサービス名を、リスナーが認識できていないという意味です。
◆ 主な原因とチェックポイント
原因 | 説明 | チェックポイント |
---|---|---|
サービス名の誤記 | 接続文字列で指定しているサービス名が存在しない、またはタイプミス | tnsnames.oraのSERVICE_NAMEやDB側のサービス名(lsnrctl status)を確認 |
リスナーがサービスを登録していない | リスナーが起動していても、対象のインスタンスが登録されていない | DB起動状態の確認、lsnrctl statusで登録サービスを確認 |
接続先がSID指定になっている | 接続方式がSID指定なのにサービス名でアクセスしている、またはその逆 | 接続方法をSID or SERVICE_NAMEに合わせて見直す |
データベース未起動 | DBが起動していないため、サービスがリスナーに登録されない | sqlplus / as sysdba → startup でDB起動を確認 |
リスナーの設定ミス | listener.ora に不要な制限や間違いがある | listener.oraを見直し、設定ミスがないかチェック |
◆ 対処法:よくあるパターン別解決手順
✅ パターン1:サービス名の誤り
エラーメッセージ例:
対処方法:
-
lsnrctl status
で現在リスナーが認識しているサービス名を確認 -
tnsnames.ora
や JDBC URL に記載されている SERVICE_NAME と一致しているか確認 -
必要に応じて修正して再接続
✅ パターン2:データベースが起動していない
確認方法:
→ DBが停止していた場合は、このコマンドで起動することで解消します。
✅ パターン3:接続方式がSID指定になっている
tnsnames.ora の記述例(良くない例)
→ SID指定をしたいなら以下のように記述
または、JDBC URL では :SID
と /SERVICE_NAME
の違いに注意。
◆ 補足:lsnrctlでのサービス確認方法
実行結果の中に Service "XXX" has 1 instance(s)
の記述があれば、リスナーはそのサービスを認識しています。
◆ まとめ
-
ORA-12514は「リスナーがサービスを認識していない」ことが原因
-
原因は設定ミス・サービス名の誤り・DB未起動など多岐にわたる
-
まずは
lsnrctl status
とtnsnames.ora
の内容を照らし合わせよう
◆ よくある質問(FAQ)
Q1. サービス名はどこで確認できますか?
A. lsnrctl status
で確認可能です。あるいはDB起動後に SELECT value FROM v$parameter WHERE name='service_names';
でも取得できます。
Q2. SIDとSERVICE_NAMEは何が違う?
A. SIDは「インスタンス名」、SERVICE_NAMEは「サービス識別子」。Oracle 9i以降はSERVICE_NAME推奨です。