19

tnsnames.oraファイルにはDatabasesとその説明 ( host+ port) が含まれています。

  • 上記のファイルに依存して接続を確立することは可能ですか? (DB名のみを提供して言ってください):

  • このファイルを見つけるには、Windows レジストリでチェックインする必要があるデフォルトのオラクル ホームを把握し、HKEY_LOCAL_MACHINE\Software\OracleすべてのKEY_XXXファイルを取得して、最初に表示されるファイルを確認する必要があります%PATH%。クライアント コンピュータでこのファイルを自動的に見つける方法はありますか?

4

5 に答える 5

26

シンドライバでtnsnamesを使用できることすら気づいていませんでしたが、バージョン10のどこかに追加されたようです。

http://docs.oracle.com/cd/B19306_01/java.102/b14355/urls.htm#BEIDIJCE

特に:

ノート:

JDBC ThinドライバでTNSNamesを使用する場合は、oracle.net.tns_adminプロパティをtnsnames.oraファイルを含むディレクトリに設定する必要があります。

java -Doracle.net.tns_admin=%ORACLE_HOME%\network\admin

前述のように、これが実際に機能するかどうかは確認していません。

「実際のネットワーク構成ディレクトリを検索する」ロジックは、一部のOracle関数を介して利用できるとは思いません。質問で概説されているように手動で行う必要があります。または、存在するTNS_ADMIN環境変数に依存する場合もあります。その場合、Javaの呼び出しは次のようになります。

java -Doracle.net.tns_admin=%TNS_ADMIN%
于 2013-01-07T11:38:58.457 に答える
16

一部の GUI では、TNS ドライバー構成が実装されていないか、機能していません (たとえば、NetBeans :-) )

https://netbeans.org/bugzilla/show_bug.cgi?id=231526

ここに簡単な回避策があります。tnsnames.ora ファイルからエントリを直接取得し、次のように jdbc ドライバ文字列に添付できます。

odbc7.jar (JDK 7 用の Oracle 12c JDBC ドライバー) を使用して Oracle 11gR2 RAC クラスターに接続する例:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostA)(PORT=1522))(ADDRESS=(PROTOCOL=TCP)(HOST=hostB)(PORT=1521)) ))(SOURCE_ROUTE=はい)(CONNECT_DATA=(SERVICE_NAME=DatabaseService)))

次のように :: を末尾に付ける場合は、末尾に host:port:service のように :: 文字を 2 つ付けることに注意してください。

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=hostA)(PORT=1522))(ADDRESS=(PROTOCOL=TCP)(HOST=hostB)(PORT=1521)) ))(SOURCE_ROUTE=はい)(CONNECT_DATA=(SERVICE_NAME=DatabaseService)))::

「NL 例外が生成されました」という例外が発生します。

もう 1 つの方法は、次のプロパティを構成することです。

もちろん、ハードコードされた値の代わりに、たとえば ORACLE_TNS_ADMIN のような環境変数をオペレーティング システムに設定して参照することもできます。

System.setProperty("oracle.net.tns_admin",System.getenv("ORACLE_TNS_ADMIN"));

または、Linux の -D スイッチを介して Java プロセスに渡します。

-Doracle.net.tns_admin=$ORACLE_TNS_ADMIN

およびウィンドウ:として

-Doracle.net.tns_admin=%ORACLE_TNS_ADMIN%

アプリケーションが TNS 構成ファイルを認識すると、次の完全な例のように、TNSNAMES.ora ファイル内のサービス名を参照して接続できます。

 // tell the driver where to look for the TNSNAMES.ORA file
System.setProperty(
          "oracle.net.tns_admin",
          "C:/app/product/11.2.0/client_1/NETWORK/ADMIN");

// ORCL is net service name from the TNSNAMES.ORA file
String dbURL = "jdbc:oracle:thin:@ORCL";

// load the driver
Class.forName("oracle.jdbc.OracleDriver");

Connection conn = null;
Statement stmt = null;

try {
  conn = DriverManager.getConnection(dbURL,
                                     "your_username",
                                     "your_password");

  stmt = conn.createStatement();

  ResultSet rs = stmt.executeQuery("SELECT dummy FROM dual");
于 2014-07-16T12:32:33.390 に答える
5

18.3 以降、tnsnames.ora ファイルの場所を提供する TNS_ADMIN を接続 URL の一部として渡すことができます。構文に注意してください。

jdbc:oracle:thin:@jdbctest_medium?TNS_ADMIN=/test/cloud/network
于 2019-10-17T19:32:13.260 に答える