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接続設定: ここに画像
答えは、PLSQL Developerフォルダーを「Program Files(x86)」から「Program Files」フォルダーに移動するだけでした-奇妙です!
このエラーは非常に一般的で、多くの場合、データベースへの接続を確立しようとしたときに最初に発生するエラーです。 ORA-12154を修正するには、次の6つのステップをお勧めします。
詳細: http://turfybot.free.fr/Oracle/11g/errors/ORA-12154.html
コメントを追加できないので、これを完成させるために投稿したいと思いました。 tufyの答えは正解です。それは、実行中のアプリケーションへのパスの括弧(大括弧)に関係しています。
ネットワーク層がOracleに接続しようとしている実行可能ファイルへのパスに括弧が含まれているプログラムの場所を解析できないという既存のネットワークのバグがあります。
Oracleに提出されているBug 3807408を参照。
プログラムファイルx86とプログラムファイルの両方にpl sql開発者をコピーして貼り付けます。クライアントが他のパーティション/ドライブにインストールされている場合は、pl sql developerもそのドライブにコピーします。デスクトップショートカットの代わりにpl sql開発者フォルダーから実行します。
究極のソリューション!落ち着く
私にとっては、tnsnames.ora接続識別子のフォーマットが不適切でした。コメントのtnsnames.oraの例に示すように、識別子文字列のインデントが必要です。
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';
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)))
また、上記の解決策に加えて、tnsname oraファイルが存在する場所も確認し、環境変数のパスと比較します。
仕事で問題がありました。 Oracleサーバーに「パッチが適用され」、使用しているデータベースの1つがTNSNamesエントリ経由ではなく、基本接続経由で接続できませんでした。データベースは稼働しており、管理者はそれが稼働中であることを確認できました。
さらに、データベースへの接続にTNSを使用したアプリケーションも機能しません。
見つかった問題は、データベース名がTNSファイルで正しくないことでしたが、何らかの理由で何年も動作しています。名前を修正することで修正されました。 Oracle SQL Developerは、更新後も古いTNSエントリを使い続けており、1つのDB接続だけに再インストールしたくありません。データベースが作成されたときに、他のデータベースよりも小さい名前が付けられ、TNSNamesファイル内のカットアンドペーストアクションによって、混乱したようです。私たちが調査しているとき、それがどのように機能したかは誰にもわかりませんが、Oracleパッチは名前が正しいことを保証しました
名前の例としては、「DBName.Part1.Part2」としてダウンしていたが、実際にはDB名は「DBName」でした。
または2番目のソリューション
toadの接続画面でホストとポートを指定することにより、TNSではなくDirectを使用して接続を試みることができます
追加したかった-明らかにこれは、Instant Client for 10をインストールしてから、フルインストールが必要であることに気づき、それを並列ディレクトリに再度インストールした場合にも発生する可能性がある。なぜこれが壊れたのかはわかりません。