tnsnames.ora
ファイルには、Databases
とその説明(Host
+ port
)が含まれています。
上記のファイルに依存して接続を確立することは可能ですか? (DB名のみを指定して言います):
このファイルを見つけるには、WindowsレジストリでHKEY_LOCAL_MACHINE\Software\Oracle
を確認し、すべてのKEY_XXX
ファイルを取得してから、どちらが最初に表示されるかを確認する必要があるデフォルトのOracleホームを知る必要があります。 %PATH%
。クライアントコンピューターでこのファイルを自動的に見つける方法はありますか?
Thinドライバで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%
まあ、いくつかの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 = yes)(CONNECT_DATA =(SERVICE_NAME = DatabaseService)))
次のように::を最後に追加する場合は、Host:port:serviceとして二重::文字を最後に追加することに注意してください。
jdbc:Oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(Host = hostA)(PORT = 1522))(ADDRESS =(PROTOCOL = TCP)(Host = hostB)(PORT = 1521) ))(SOURCE_ROUTE = yes)(CONNECT_DATA =(SERVICE_NAME = DatabaseService)))::
「NL例外が生成されました」という例外が発生します。
別のアプローチは、次のプロパティを構成することです。System.setProperty( "Oracle.net.tns_admin"、 "C:/app/product/11.2.0/client_1/NETWORK/ADMIN");
もちろん、ハードコードされた値の代わりに、たとえば、Oracle_TNS_ADMINのようなオペレーティングシステムで環境変数を設定し、それを参照できます。
System.setProperty("Oracle.net.tns_admin",System.getenv("Oracle_TNS_ADMIN"));
または、Java Linuxの-Dスイッチ経由で処理します:
-Doracle.net.tns_admin=$Oracle_TNS_ADMIN
およびwindows:as
-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");
まず、SQL Developerソフトウェアがマシンに適切にインストールされていることを確認してください。シンドライバーを使用している場合は、ojdbcX.jarファイルがビルドパスにあることを確認してください。 TNSエイリアス名を使用してOracleデータソースに接続する手順は次のとおりです。
_Oracle.net.tns_admin
_のシステムプロパティを設定します。これは、_tnsnames.ORA
_ファイルがあるディレクトリを指す必要があります
System.setProperty("Oracle.net.tns_admin", DIRECTORY_PATH_TO_TNSNAME.ORA_FILE);
Oracleドライバーを登録する
DriverManager.registerDriver(new OracleDriver());
接続オブジェクトを作成する
Connection conn = DriverManager.getConnection("jdbc:Oracle:thin:username/password@TNS_ALIAS_NAME");
これにより、データベース接続が確立されます。