Oracleインスタントクライアントを使用して、Oracleデータベースと通信するアプリケーションサーバーがあります。特定のバグのトラブルシューティングを行っています。sqlnet.oraファイルに次のフラグを追加できるかどうか尋ねられました。
DIAG_ADR_ENABLED=OFF
DIAG_SIGHANDLER_ENABLED=FALSE
DIAG_DDE_ENABLED=FALSE
このリクエストの前は、クライアント側にsqlnet.oraファイルは必要ありませんでした。インスタントクライアントでは、ojdbc6.jarのクラスパスとjarのディレクトリのld_library_pathを参照し、次のようなURLを使用できます。
jdbc:Oracle:oci:@server:port:sid
Oracleドキュメントを見ると、Oracle_HOMEおよびTNS_ADMINの環境変数を追加した場合、クライアント側でsqlnet.oraファイルやtnsnames.oraファイルを参照できるように見えました。
上記のパラメーターを使用してsqlnet.oraファイルを作成し、ファイルが読み取られていることを確認できるようにいくつかのトレースパラメーターを追加しました。
TRACE_LEVEL_CLIENT=10
TRACE_DIRECTORY_CLIENT=/tmp
また、tnsnames.oraファイルを作成しました。
APPDB =
(DESCRIPTION =
(ADDRESS LIST =
(ADDRESS = (PROTOCOL = TCP)(Host = *Host*)(Port = *port*)))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = *service*)))
最後に、環境変数を追加し、アプリケーションを再起動しました。元の単純なURLで試したところ、ファイルが読み取られた場合にファイルが作成されることがトレースフラグで予想されるように、設定が反映されていないことが明らかでした。次に、TNS名を使用してURLを作成しようとしました。このドキュメントでは、接続する追加のファイルをTNS_ADMINで検索するように聞こえます。
jdbc:Oracle:oci:@(DESCRIPTION=(ADDRESS LIST=(ADDRESS = (PROTOCOL = TCP)(Host = *Host*)(Port = *port*)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = *service*)))
これまでのところ、トレースファイルが表示されることはありません。また、この問題の一部を実行している、ステップが欠落している、または間違ったURLを使用していると感じています。 tnsnames.oraファイルのように「APPDB」を参照する接続文字列のいくつかのバリアントを試しましたが、まったく機能しないか、接続されますが、sqlnet.oraから設定を取得していないようです。 。
何が欠けている可能性があるのか、または実際にこれらの設定を適用できるのはDB側でしかできない場合はどうでしょうか?
私はそれを考え出した。 JDBCドライバーのLD_LIBRARY_PATHおよびCLASSPATHを設定する必要があるのと同じように、ユーザーの環境変数を設定する代わりに、アプリケーションのJVMを起動するときにそれらをアサートする必要がありました。 JVMの起動時にすべてが設定されていて、TNS_ADMINを設定したディレクトリにsqlnet.oraファイルがある場合、ファイルが読み取られます。
Oracle Instant ClientとOracle Universal InstallerによってインストールされるOracleクライアントの違いは、それらのインストール方法にあります。 Oracleユニバーサルインストーラーは、インスタントクライアントが持っていない、または使用していないレジストリを維持します。ただし、ソフトウェアコンポーネントは、インストールに使用する方法に関係なく同じです。 jdbc ociドライバを使用する場合、Javaを使用して、すべてを使用する既知のクライアントであるOracle OCIクライアントのライブラリにアクセスしますtnsname.oraを使用できるクライアント。これらはsqlplus、ODBCプログラム、Oracleプリコンパイラを使用するCプログラム、... OCIクライアントでのアクセスはtnsnames.oraで設定できます。およびsqlnet.oraとよく知られている環境変数(Oracle_HOME、Oracle_SID、TNS_ADMINなど)。Javaには、jdbcシンクライアントを使用してOracleデータベースにアクセスする新しい方法があります。これは、Javaに完全に実装されたクライアントであり、Oracle OCIライブラリを使用しませんが、Javaデータベース。このクライアントは、tnsnames.ora、sqlnet.ora、環境変数の影響を受けません。これらのファイルは必要ありません。シンクライアントを実装する適切なjarファイルのみが必要です。
プログラムにociクライアントを使用する場合、このプログラムを起動する環境でOracle関連変数を設定する必要があります。したがって、プログラムがシェルスクリプトによって開始された場合、このシェルスクリプトは関連する変数を設定およびエクスポートする必要があります。変数TNS_ADMINに格納されているディレクトリで、tnsnames.oraおよびsqlnet.oraが検索されます。この変数が設定されていない場合、他のディレクトリでこれらのファイル(または同様のファイル)が検索されます。これは、オペレーティングシステムおよびOracle_HOMEの値(設定されている場合)によって異なります。適切なファイルが見つからない場合は、デフォルト値が使用されます。
DIAG_ADR_ENABLED = OFFADR-logging (11.1以降で使用可能)を使用するか、従来のロギングを使用するかを決定します。 ADRログが無効に無効になっている場合、TRACE_DIRECTORY_CLIENTパラメーターは無視され、sqlnetトレースファイルは、ADRログで使用されるdiag-directoriesのどこかにあります。 。