web-dev-qa-db-ja.com

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

Oracleデータベースにアクセスするには、PLSQL Developerを使用する必要があります。データベースに接続しようとすると、次のエラーが表示されます。 ORA-12154: TNS:could not resolve the connect identifier specified.コマンドラインからSQLPLUSを使用してデータベースに接続できます。 tnsping 正常に戻りますが、PLSQL Developerが機能しない理由を理解できません-適切な方法を使用しています tnsnames.ora ファイルとそこにある接続文字列は正しいので、 tnsping 使用します。

誰でも私がこれを修正するために何ができるか考えていますか?私はこの特定のエラーについて他のスレッドを見ましたが、運がありませんでした。

tnsnames.ora

    ORCL =
      (DESCRIPTION = 
      (ADDRESS = (PROTOCOL = TCP)(Host = MININT-AIVKVBM)(PORT = 1521)) 
      (CONNECT_DATA = 
        (SERVER = DEDICATED) 
        (SERVICE_NAME = orcl)
      )
    )

sqlnet.ora

     SQLNET.AUTHENTICATION_SERVICES= (NTS)
     NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

sqlpusコマンドラインここに画像

PLSQL Developer接続設定ここに画像

5
ZakTaccardi

答えは、PLSQL Developerフォルダーを「Program Files(x86)」から「Program Files」フォルダーに移動するだけでした-奇妙です!

28
ZakTaccardi

このエラーは非常に一般的で、多くの場合、データベースへの接続を確立しようとしたときに最初に発生するエラーです。 ORA-12154を修正するには、次の6つのステップをお勧めします。

  1. インスタンス名がtnsnames.oraに正しく入力されていることを確認してください。
  2. インスタンス名またはデータベース名の最後に制御文字があってはなりません。
  3. TNSエントリ周辺のすべての括弧は適切に終了する必要があります
  4. Sqlnet.oraのドメイン名エントリは、完全なデータベース名と競合してはなりません。
  5. それでも問題が解決しない場合は、tnsnames.oraにTNSエントリを再作成してください。
  6. 最後に、SQL * Net Easy構成ユーティリティを使用して新しいエントリを追加できます。

詳細: http://turfybot.free.fr/Oracle/11g/errors/ORA-12154.html

3
tufy

コメントを追加できないので、これを完成させるために投稿したいと思いました。 tufyの答えは正解です。それは、実行中のアプリケーションへのパスの括弧(大括弧)に関係しています。

ネットワーク層がOracleに接続しようとしている実行可能ファイルへのパスに括弧が含まれているプログラムの場所を解析できないという既存のネットワークのバグがあります。

Oracleに提出されているBug 3807408を参照。

ソース

1
Dave Salomon

プログラムファイルx86とプログラムファイルの両方にpl sql開発者をコピーして貼り付けます。クライアントが他のパーティション/ドライブにインストールされている場合は、pl sql developerもそのドライブにコピーします。デスクトップショートカットの代わりにpl sql開発者フォルダーから実行します。

究極のソリューション!落ち着く

1
khayam

私にとっては、tnsnames.ora接続識別子のフォーマットが不適切でした。コメントのtnsnames.oraの例に示すように、識別子文字列のインデントが必要です。

0
Jan Matousek

OracleホームからPLNS Developer Mainフォルダーにtnsnamesとsqlnetファイルをコピーして貼り付けるだけです。以下のクエリを使用してOracleホームを取得する

select substr(file_spec、1、instr(file_spec、 '\'、-1、2)-1)Oracle_HOME from dba_libraries where library_name = 'DBMS_SUMADV_LIB';

0
Alok

VM実行中のCentOS7とWindows 7からアクセス可能なOracle 11GR2で同じ問題がありました。解決策は奇妙でした。ローカルマシンでは、DBを指すtnsnamesにサービス名の前にスペースがありました。スペースを削除したところ、接続できました。

簡単な例。

Tnsnamesが間違っています。

[これは空のスペースです] XE =(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(Host = 127.0.0.1)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = XE)))

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

正しいtnsnames。

XE =(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(Host = 127.0.0.1)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = XE)))

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

0
sandatomo

また、上記の解決策に加えて、tnsname oraファイルが存在する場所も確認し、環境変数のパスと比較します。

0
venky_ferrari

仕事で問題がありました。 Oracleサーバーに「パッチが適用され」、使用しているデータベースの1つがTNSNamesエントリ経由ではなく、基本接続経由で接続できませんでした。データベースは稼働しており、管理者はそれが稼働中であることを確認できました。

さらに、データベースへの接続にTNSを使用したアプリケーションも機能しません。

見つかった問題は、データベース名がTNSファイルで正しくないことでしたが、何らかの理由で何年も動作しています。名前を修正することで修正されました。 Oracle SQL Developerは、更新後も古いTNSエントリを使い続けており、1つのDB接続だけに再インストールしたくありません。データベースが作成されたときに、他のデータベースよりも小さい名前が付けられ、TNSNamesファイル内のカットアンドペーストアクションによって、混乱したようです。私たちが調査しているとき、それがどのように機能したかは誰にもわかりませんが、Oracleパッチは名前が正しいことを保証しました

名前の例としては、「DBName.Part1.Part2」としてダウンしていたが、実際にはDB名は「DBName」でした。

0
user2960847
  • それは機能しなかったので、Oracle sql開発者に切り替えましたが、問題なく動作しました(1分未満で接続を確立)。
  • このリンクは私にアイデアを与えました MS Accessに接続 なので、Oracle SQL開発者でユーザーを作成し、Toadでそれに接続しようとしましたが、うまくいきました。

または2番目のソリューション

toadの接続画面でホストとポートを指定することにより、TNSではなくDirectを使用して接続を試みることができます

0
shareef

追加したかった-明らかにこれは、Instant Client for 10をインストールしてから、フルインストールが必要であることに気づき、それを並列ディレクトリに再度インストールした場合にも発生する可能性がある。なぜこれが壊れたのかはわかりません。

0
TallDave