38 JDBCの診断機能
このリリースでは、JDBCの診断機能が、よりわかりやすくなるように拡張されています。
オンプレミス・ユーザーと異なりクラウド・ユーザーにはシステムへの絶対的なアクセス権がないため、この拡張により、Oracle Cloud Infrastructure (OCI)環境でのJDBCドライバの使用も容易になります。拡張された診断機能により、クラウド環境でアクセス可能で構成可能な診断機能が提供されます。
38.1 JDBC診断機能の概要
JDBC診断機能はクライアント専用の機能です。サーバー側のThinドライバやサーバー側の内部ドライバでは動作しません。
以前のリリースでは、デバッグJAR
ファイルはロギング目的で使用されます。これらのファイルは、ojdbc6_g.jar
やojdbc7_g.jar
などのファイル名で_g
で示され、CLASSPATH
に含まれている必要があります。拡張された診断機能により、デバッグJAR
ファイルを使用する必要がなくなり、通常のJAR
ファイルとデバッグJAR
ファイルを切り替える必要もなくなります。現在、通常のJAR
ファイルにはロギング機能が含まれており、次のプロパティで有効にできます。
-Doracle.jdbc.diagnostic.enableLogging=true
ロギング構成ファイルは次の方法で構成できます。
-Djava.util.logging.config.file=./logging.config
JDBC診断機能
改善されたJDBC診断機能は、Oracle Databaseの次の機能に基づいて構築されます。
- 可観測性: Java開発者は、JDBCの実行およびパフォーマンスに関するサマリー情報にアクセスできます。
- 診断可能性: 障害が発生した場合にクリティカルな実行状態を記録します。このような状態は、最初に発生した障害を診断し、障害の原因となる問題を解決するのに十分です。記録された状態情報の量と、その状態を記録したコストのバランスを取る必要があります。
- 実行トレース: 実行順序の詳細を記録します。実行トレースにはかなりのコストがかかるため、限定されたコンテキストでのみ有効にする必要があります。
各診断機能には、パブリックと機密の2つのモードがあります。パブリック・モードでは、これらの機能は機密情報の記録や永続化を実行しません。これにより、取得される情報の量が大幅に制限され、診断機能の有効性が低下します。機密モードでは、これらの機能は機密情報を記録し、永続化します。機密モードを許可するには、特権ユーザーである必要があります。
機密モードは2つのスイッチによって制御され、1つは有効化用、もう1つは許可用です。各診断機能に対する機密モードは、適切なJavaコマンドライン・スイッチを設定することで許可されます。Javaコマンドラインでスイッチが設定されていない場合、機密モードを許可できません。機密モードを許可したら、次の例に示すように有効にする必要があります。
-Doracle.jdbc.diagnostic.permitSensitiveDiagnostics=true
-Doracle.jdbc.diagnostic.enableSensitiveDiagnostics=true
ノート:
機密モードを許可しても、自動的に有効になりません。機密モードを有効にしようとすると、許可されていない場合、致命的なエラーが発生します。例
次のコード・スニペットは、ロギング構成ファイルを構成する方法を示しています。
例38-1 ロギング・ファイルの構成
handlers = java.util.logging.ConsoleHandler
oracle.jdbc.level = FINEST
java.util.logging.ConsoleHandler.level = FINEST
java.util.logging.ConsoleHandler.formatter = oracle.jdbc.diagnostics.OracleSimpleFormatter
例38-2 ロギング・ファイルの構成(詳細)
handlers=java.util.logging.FileHandler
java.util.logging.FileHandler.level = FINEST
java.util.logging.FileHandler.formatter = oracle.jdbc.diagnostics.OracleSimpleFormatter
java.util.logging.FileHandler.pattern = client.log
java.util.logging.FileHandler.limit = 1000000000
java.util.logging.FileHandler.count = 1000
oracle.ucp.level=FINEST
oracle.jdbc.level=FINEST
38.1.1 初期障害の診断機能
拡張された主な診断機能の1つは、初期障害の診断機能です。
この機能を有効にすると、最初に発生した障害が診断され、最もクリティカルなトレース情報がメモリーに取得されます。そのメモリーが一杯になると、最も古いトレース・レコードは上書きされ、その後、通知されたときにjava.util.logging
にダンプされます。次のいずれかによって、トレース・レコードのダンプが通知される場合があります。
- 接続でのエラーの発生
- クライアント・アプリケーション・コードによるAPIのコール
- MBean
この機能では、最もクリティカルな情報、つまり、最も可能性の高い問題を十分診断できる見込みがあるほどの情報のみを取得します。パブリック・モードでは、この情報は厳しく制限されているため、機密情報はすべて省略されます。機密モードでは、この情報にはネットワークの対話全体が含まれます。
この機能は、デフォルトでは有効化されています。CONNECTION_PROPERTY_ENABLE_DIAGNOSE_FIRST_FAILURE
プロパティをFALSE
に設定するか、DiagnosticMBeans
インタフェースを使用して無効にできます。