284

次のエラーが発生しているローカルでアプリケーションを実行しています。

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

TNSPing正しく解決された接続を使用してテストし、接続を試みSQLPlusましたが、上記と同じエラーで失敗しました。私はこの構文を次のように使用しましたSQLPlus:

sqlplus username/password@addressname[or host name]

次のことを確認しました。

  • サーバー上の TNS リスナーが実行されています。
  • サーバー上の Oracle 自体が実行されています。

この環境に加えられた変更についてはわかりません。他にテストできることはありますか?

4

28 に答える 28

258

私はこの問題を抱えていました。修正は、データベース内の有効なサービス名であるtnsnames.oraことを確認することでした。SERVICE_NAME有効なサービス名を見つけるには、oracle で次のクエリを使用できます。

select value from v$parameter where name='service_names'

更新したらtnsnames.ora

TEST =
   (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = *<validhost>*)(PORT = *<validport>*))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = *<servicenamefromDB>*)
    )
)

それから私は走った:

sqlplus user@TEST

成功!リスナーは基本的に、使用している service_name が DB によると有効なサービスではないことを伝えています。

(*私は、Win7 クライアント ワークステーションからリモート DB に sqlplus を実行していて、DBA のせいにしていました ;) *)

于 2013-04-16T23:36:56.267 に答える
13

Windows Server 2008 R2およびOracle 11gでこの問題が発生しました

Net Manager > Listener > コンボボックスからデータベース サービスを選択 > "Global Database Name" は "SID" と同じで、"Oracle Home Directory" は正しい必要があります。

データベース サービスのエントリがない場合は、エントリを作成し、正しいグローバル データベースsidと oracle ホームを設定します。

于 2013-12-21T14:27:27.900 に答える
9

services.msc から OracleServiceXXX を開始すると、Windows でうまくいきました。

于 2015-06-16T07:48:19.700 に答える
2

VM で Oracle を実行している可能性がある人 (私のように) の場合、VM のメモリが不足しているため、この問題が発生しました。これにより、OracleDB が正しく起動/実行されないようです。VM メモリを増やして再起動すると、問題が修正されました。

于 2016-04-14T18:14:23.417 に答える
2

このエラーは、アプリケーションがデータベースとの対話ごとに新しい接続を作成するか、接続が適切に閉じられていない場合に発生する可能性があります。これを監視および確認するための無料ツールの 1 つは Oracle Sql developer です (ただし、DB セッションを監視するために使用できるツールはこれだけではありません)。

このツールは、Oracle サイトのSql Developerからダウンロードできます。

これは、セッションを監視する方法のスクリーンショットです。(ORA-12514エラーが表示されている間にアプリケーション・ユーザーに対して多くのセッションが積み重なっている場合は、接続プールに問題がある可能性があることを示しています)。

ここに画像の説明を入力

于 2013-04-01T00:21:58.280 に答える
2

データベースが稼働していることを確認します。サーバーにログオンし、ORACLE_SID 環境変数をデータベース SID に設定し、SQL*Plus をローカル接続として実行します。

于 2012-05-29T00:50:27.980 に答える
0

私の場合、SERVICE_NAME を囲む丸括弧がtnsnames.oraファイルにありませんでした。

<DBNAME> =
  (DESCRIPTION =
    (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL=TCP)(HOST = nupark-cnvr-ora )(PORT=1521))
    )
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = <DBNAME> ***CLOSING ROUND BRACKET WAS MISSING HERE***
    )
  )

LISTENER_<DBNAME> =

  (ADDRESS = (PROTOCOL = TCP)(HOST = nupark-cnvr-ora)(PORT = 1521))
于 2020-03-10T17:59:47.303 に答える
0

問題は、接続文字列の URL に SID ではなくデータベース名が含まれていたことです。データベース名を Oracle データベース接続 SID に置き換えると、この問題が解決しました。

Oracle SID を知るには、tnsnames.oraファイルを参照します。

XEが実際の SID だったので、Tomcat 接続文字列は次のようになります。

    <Resource
       name="jdbc/my_db_conn"
       auth="Container"
       type="javax.sql.DataSource"
       driverClassName="oracle.jdbc.driver.OracleDriver"
       url="jdbc:oracle:thin:@//127.0.0.1:1521/XE"
       username="test_user"
       password="test" />

私のサーバーのバージョンは「Oracle 11.2 Express」でしたが、ソリューションは他のバージョンでも機能するはずです。

于 2019-12-05T12:07:44.347 に答える
0

私にとって、これはインストールを使用して動的 ipadress を使用したことが原因でした。静的 ipadres を使用して Oracle を再インストールしたところ、すべて問題ありませんでした

于 2016-12-03T07:45:39.290 に答える
0

データベース接続フォームを満たす必要がある DBMS を使用したケースがありました。

データベース フィールドに SID を入力すると、フィールドの横のドロップダウンに、「SID」値ではなく「サービス名」値がありました。
(通常、私はOracleデータベースを使用していないので、違いを認識していません)

それがエラーメッセージを受け取った理由です。

于 2020-07-28T16:02:00.347 に答える