スポンサーリンク

こんにちは。データベースエンジニアのなかつです。

今回は突然oracleに繋がらなくなるエラーである「ORA-12514: TNS: リスナーは現在、接続識別子でリクエストされているサービスを認識していません」の原因と解決方法を紹介します。

この記事には、エラー調査のコマンドや解決するためのコマンドも載せているので、読めば解決に近づけるはずです。

5分ほどで読めるので、エラー解決までお付き合いいただければと思います。

スポンサーリンク

ORA-12514: TNS: リスナーは現在、接続識別子でリクエストされているサービスを認識していませんの原因

ora-12514の原因

まず、ORA-12514のエラーについて説明します。

ORA-12514のエラーは「リスナーがクライアントから接続要求を受けた際、接続先となるサービスが存在していない」場合に発生します。(認識していない等も当てはまります)

 

ORA-12514のエラーメッセージは、以下の通りとなっています。

ORA-12514: TNS: リスナーは接続記述子にあるSERVICE_NAMEを解決できませんでした。
ORA-12514: TNS: リスナーは接続記述子で要求されたサービスを現在認識していません。
ORA-12514: TNS: listener could not resolve SERVICE_NAME given in connect descriptor
ORA-12514: TNS: listener does not currently know of service requested in connect descriptor

oracleのエラーメッセージより
ORA-12514の原因は、以下の二つのどちらかが考えられますね。もしくは両方の可能性もあります。

ORA-12514の原因1 リスナー側の設定の問題

リスナー側の設定に、問題があると接続できませんよね。

記事を読み進めて、リスナー側に問題が無いか確かめましょう!

ORA-12514の原因2 クライアントの接続先設定の問題

クライアントの接続先がずれている場合も同様にエラーが発生します。

記事を読み進めて、クライアントに問題が無いか確かめましょう!

スポンサーリンク

ORA-12514の解決方法1 ホスト側のリスナーに問題が無いか調べよう

ora-12514の原因1

はじめにホスト側のリスナーに、問題が無いかを以下の手順で確かめます。

  1. ホスト側のリスナーが動いているか?
  2. ホスト側のリスナーの設定があっているか?

順番に説明していきますね!

ORA-12514の解決方法1-1 リスナーが動いているか確認しよう!

まずは、ホスト側のリスナーが動いているかを確かめます。そもそも動いていないと接続することができないので、念のために確認するという認識です。

確かめるコマンドは、以下となっております。

$ lsnrctl status リスナー名

デフォルトの場合は、リスナー名を入力する必要はありません。(あえて指定する場合のみ、リスナー名を入力しましょう!)

もし「リスナーがありません」や「プロトコルアダプタエラー」といった文言が、ターミナルに表示される場合、リスナーが起動していません。

 

その場合は以下のコマンドを叩いて、再起動させましょう!

$ lsnrctl start リスナー名

リスナー名はこちらもデフォルトと異なる場合に入力すればOKです。(できれば入力しましょう。)

これでリスナーは起動しているはずです。次のステップに進みましょう!

※リスナー起動後は、1分ほど時間をあけてください。

ORA-12514の解決方法1-2 リスナーの設定が合っているか確認しよう

リスナーのサービス名とクライアントの接続先が合っていない場合に、このエラーが発生することが多いです。

そのため、まずはリスナーのサービス名を確認しましょう!下記のコマンドを叩くことで、リスナー側のサービス名を確認することができます。

$ lsnrctl services

 

これでサービス名の確認ができましたね。それでは引き続き、クライアント側の設定と合っているか確かめていきましょう!

ORA-12514の解決方法2 クライアントの接続先設定を調べよう!

クライアントの接続先設定を調べます。クライアントの接続先は、「tnsnames.ora」に書かれています。

ORA-12514の解決方法2-1 tnsnames.oraを探そう

ここでいうクライアントは設定などにもよりますが、おそらく「DBサーバ」なのでPCのローカルを探さないようにしてください。

DBサーバ→oracleへ接続しに行くので、この場合のクライアントはDBサーバとなりますよね。ターミナル等でDBサーバに接続して、「tnsnames.ora」を探しましょう!

tnsnames.ora」の配置場所は、プロジェクトによって異なるので、周りの人に聞いてみるのが良いですね。

 

ちなみにデフォルトでTNS_ADMIN 環境変数が設定されていない場合には、『 $ORACLE_HOME/network/admin』 ディレクトリにあるものを参照するようです。

ORA-12514の解決方法2-2 tnsnames.oraの中身を確認してみよう

「tnsnames.ora」の中身は、以下のようになっています。

mydb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver.rivus.jp)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = my_database)
    )
  )

「SERVICE_NAME」という項目が、ありますよね?(このソースでは「my_database」となってます。)

これがリスナー側と合っていれば、問題なく繋がるはずです。

ORA-12514: TNS: サービス名を解決できませんでしたの原因と解決方法のまとめ

ora-12514

ORA-12514: TNS: サービス名を解決できませんでしたの原因と解決方法を紹介しました。

読んでいただいた方が、エラーから解消されていれば幸いです。

上記であげた他にも、チェックするべきポイントがあります。それは「DBのグローバル名」です。しかしグローバル名が原因で、エラーが起こることは少ないので「サービス名」に特化した記事を作りました。

もしこの記事を読んで解決できていないようであれば、DBのグローバル名で調べてみてください。

 

\エラーに対して毎回1から調べるのが面倒だよ!という人におすすめ!/
理解しなくてもエラーの対処法や勘所を見つけられるのは、こういうポケットリファレンスなんですよね。ぜひ一冊手元に置いておこう!

スポンサーリンク

Twitterでフォローしよう

おすすめの記事