SQL Developerを使用してOracleデータベースに接続しようとしています。
.Net Oracleドライバーをインストールし、tnsnames.ora
ファイルを次の場所に配置しました。C:\Oracle\product\11.1.0\client_1\Network\Admin
Tnsnames.oraで次の形式を使用しています。
dev =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(Host = 192.168.XXX.XXX)(PORT = XXXX))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = idpdev2)
)
)
SQL Developerで新しい接続を作成しようとすると、TNS名がオプションとして表示されません。
私が見逃しているものはありますか?
SQL Developerは、次の場所でこの順序でtnsnames.oraファイルを探します。
どのSQL Developerが使用されているかを確認するには、ワークシートでコマンドshow tns
を発行します
Tnsnames.oraファイルが認識されない場合は、次の手順を使用します。
TNS_ADMINという環境変数を定義して、tnsnames.oraファイルを含むフォルダーを指すようにします。
Windowsでは、コントロールパネル> システム> システムの詳細設定> 環境変数... =
Linuxでは、ホームディレクトリの.profileファイルでTNS_ADMIN変数を定義します。
OSがこの環境変数を認識していることを確認します
Windowsコマンドラインから:echo%TNS_ADMIN%
Linuxから:echo $ TNS_ADMIN
SQL Developerを再起動します
SQL Developerを開きます。 [ツール]-> [設定]-> [データベース]-> [詳細設定]に移動し、Tnsnamesディレクトリを明示的に設定します。
TNSNAMESは正しくセットアップされ、Toad、SQL * Plusなどに接続できましたが、SQL Developerを機能させるにはこれを行う必要がありました。おそらくインストールも苦痛だったので、Win 7の問題だったのかもしれません。
TNSPINGを実行して接続を確認することにより、使用されているtnsnames.oraファイルの場所をいつでも確認できます(9i以降)。
C:\>tnsping dev
TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 08-JAN-2009 12:48:38
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
C:\Oracle\product\10.2.0\client_1\NETWORK\ADMIN\sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(Host = XXX)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = DEV)))
OK (30 msec)
C:\>
時々、問題はtnsnames.oraで作成したエントリにあり、システムがそれを見つけることができないということではありません。とはいえ、tns_admin環境変数を設定することは良いことです。複数のOracleホームを持つシステムで使用されているtnsnamesファイルを正確に判断する際に生じる避けられない問題を回避できるからです。
SQLDeveloperで、下の画像に示すように、Tools --> Preferences
を参照します。
Preferences options expand Database --> select Advanced --> under "Tnsnames Directory" --> Browse the directory
でtnsnames.oraが存在します。
次にOkをクリックします。
下図に示すとおり。
完了しました!
これで、TNSnamesオプションを介して接続できます。
Jasonが言及した手順は非常に優れており、機能するはずです。ただし、SQL Developerには少しひねりがあります。 tnsnames.oraファイルを初めて読み取るときに、接続仕様(ホスト、サービス名、ポート)をキャッシュします。その後、元のエントリがtnsname.oraファイルから削除されても、仕様は無効になりません。キャッシュは、SQL Developerを終了して再起動した後も保持されます。これは、状況を処理するそのような非論理的な方法ではありません。 tnsnames.oraファイルが一時的に利用できない場合でも、SQL Developerは元の仕様が真である限り接続を確立できます。問題は、次の小さなひねりを伴います。 SQL Developerは、接続を解決するときに、tnsnames.oraファイル内のサービス名を大文字と小文字を区別する値として扱います。そのため、ファイルにABCD.worldというエントリ名があり、それをabcd.worldという名前の新しいエントリに置き換えた場合、SQL DeveloperはABCD.worldの接続仕様を更新しません。abcd.worldは別のものとして扱われます。接続全体。 Oracle製品が、大文字と小文字を区別しないOracleが開発したファイル形式のコンテンツを大文字と小文字を区別するものとして扱うことに驚かないのはなぜですか?
Sql Developerで、[ツール]-> [設定]-> [データベース]-> [詳細]-> [Tnsnamesディレクトリをtnsnames.oraを含むディレクトリに設定]に移動します。
上記の変更はいずれも私の場合に違いをもたらしませんでした。コマンドウィンドウでTNS_PINGを実行できましたが、SQL Developerはtnsnames.oraがどこにあるかを把握できませんでした。
私の場合の問題(Windows 7-64ビット-Enterprise)は、Oracleインストーラーが[スタート]メニューのショートカットを間違ったバージョンのSQL Developerに向けていることでした。インストーラーに付随する3つのSQL Developerインスタンスがあるようです。 1つは%Oracle_HOME%\ client_1\sqldeveloper \にあり、2つは%Oracle_HOME%\ client_1\sqldeveloper\bin \にあります。
インストーラは、単に機能しなかったbinディレクトリ内のバージョンを指すスタートメニューショートカットをインストールしました。接続メカニズムとしてTNSを選択したときに行った選択を記憶しておらず、SQL Developerを起動するたびにパスワードを要求します。また、他の投稿で参照されているデータベースの詳細設定のTNSディレクトリフィールドもありません。
古いStartショートカットを投げて、%Oracle_HOME%\ client_1\sqldeveloper\sqldeveloper.exeへのショートカットをインストールしました。その変更は私の場合の問題を修正しました。