web-dev-qa-db-ja.com

ORA-12154:TNS:指定された接続識別子を解決できませんでした

Linux EL5にインストールされているOracle11gに接続しようとすると、次のエラーが発生します

SQL> connect sys/password@ud06 as sysdba
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor

network/adminの下の私のlistener.oraは次のとおりです

LISTENER=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(Host=ud06)(PORT=1521))
      (ADDRESS=(PROTOCOL=ipc)(KEY=extproc))))

SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (GLOBAL_DBNAME=orcl)
      (Oracle_HOME=/home/Oracle/app/Oracle/product/11g)
      (SID_NAME=orcl))
    (SID_DESC=
      (SID_NAME=plsextproc)
      (Oracle_HOME=/home/Oracle/app/Oracle/product/11g)
      (PROGRAM=extproc)))

私のtnsnames.oraは次のとおりです

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(Host = localhost.localdomain)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

UD06=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(Host = ud06)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

私のlsnrctlステータスは次のように表示されます。

LSNRCTL> status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=ud06.us.server.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                17-FEB-2010 16:23:06
Uptime                    0 days 0 hr. 12 min. 33 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /home/Oracle/app/Oracle/product/11g/network/admin/listener.ora
Listener Log File         /home/Oracle/app/Oracle/product/11g/log/diag/tnslsnr/ud06/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=ud06.us.server.com)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))
Services Summary...
Service "orcl" has 1 instance(s).
  Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
Service "plsextproc" has 1 instance(s).
  Instance "plsextproc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
8
user275705

Ud06に正常にpingできますか(ud06.us.server.comではなくud06として)?

コマンドは何をしますか

lsnrctl services

公演?

編集:データベースインスタンス名が実際には「orcl」ではないように思えますか? lsnrctl servicesの出力からわかることは、「orcl」サービスは、listener.oraファイルで定義されていますが、実際には実行されていないということです。

サーバーに直接接続してログオンできますか?その場合、Oracle_SID環境変数値として何を使用しますか? SYSユーザーとしてログインし、次のコマンドを発行します。

ALTER SYSTEM REGISTER;

次に、lsnrctl servicesコマンドを再度発行して、追加のインスタンスが表示されないかどうかを確認します。

また、Alexが指摘しているように、tnspingコマンドは完全修飾サービス名を報告しています。 sqlnet.oraファイルを編集し、NAMES.DEFAULT_DOMAIN値に値がある場合はNULLに設定します。

編集2:tnsping ud06 サーバー上は機能しますか?または、クライアントとサーバーが異なるシステム上にあるという私の仮定は間違っていますか?

4
DCookie

この問題への答えは非常に簡単です。 .oraファイルやその他の構成について心配する必要はありません。 Oracleはこれらすべてを完璧に実行します。

コマンドライン経由で接続している場合にのみ、@記号が含まれているパスワードと混同されます。

したがって、コマンドラインSQLを介して接続するときは、「@」を含むパスワードを使用しないでください。 Webインターフェイスを使用して、「@」記号を含まないパスワードを持つアカウントを作成するだけです。

あれは!!問題が解決しました。数日頭を骨折していたのですが、問題は解決しました!!

tnsping出力のSERVICE_NAMEtnsnames.oraのエントリと一致しません。そのファイルはWindowsボックスまたはLinuxボックスからのものですか? tnsnames.oraのローカル(Windows)u06エントリがないようで、サービス名がそれを展開する必要があるかどうかを推測しています-それがホスト名アダプタへの参照の意味だと思います。

1
Alex Poole

次のような接続文字列を指定します。

サーバー名:ポート/サービス名;ユーザー名;パスワード

Add connection image

0
user4618214

私も同じエラーに直面していました、このコードを試してください:

SQL> conn  hr/hr  @pdborcl;

同じエラーが見つかった場合は、プラグ可能なデータベース名が異なることを意味します。 sqlplusに次のコマンドを書き込むだけで、プラグ可能なデータベース名を確認できます。

sql> SELECT  name,  con_id  FROM  v$pdbs;
0
pradeep kumar

また、ORA-12154に遭遇しました:TNS:指定された接続識別子を解決できませんでした。Oracleのoinstallグループに接続しようとしているユーザーを追加すると修正されました。

0
wdk

まず、Oracleインスタンスが開始されているかどうかを試してください。

windowsの場合:

スタート->設定パネル->管理ツール->サービス-> ORACLESERVICEORCL(ちなみに私のインスタンス)->スタート

0
ezzaam

この手順を使用してこの問題を修正しました。

まず、同じディレクトリまたはドライブをインストールしなかった場合、このエラーが発生しました。

しかし、答えはここにあります。

  1. 管理者としてウィンドウにログインします。
  2. コントロールパネルに移動します。
  3. [システムのプロパティ]をクリックし、[環境]をクリックします
  4. OS変数を見つけて、名前を「TNS_ADMIN」に変更します

    enter image description here

  5. そして、値を「tnsnamesのディレクトリアドレス」として変更します enter image description here

  6. システムを再起動します。

  7. おめでとうございます。
0
aemre