17 WebLogic JDBCリソースの管理

WebLogic Server管理コンソール、コマンド行、JMXプログラムまたはWebLogic Scripting Tool (WLST)スクリプトを使用して、ドメイン内のJDBCデータ・ソースを管理する方法を学習します。

データ・ソースおよびデータベース接続のテスト

データ・ソースのデータベース接続が常に正常であるように、接続を定期的にテストすることをお薦めします。WebLogic Serverでは、2種類の基本的なテストを使用できます。データ・ソースの属性を使用して構成する自動テストと、データ・ソースをトラブルシューティングするために実行できる手動テストです。

WebLogic Serverがプール接続の一貫性を自動的に維持できるようにすることで、DBMS接続のほとんどの問題を防止できます。自動接続テストの構成の詳細は、「データ・ソースの接続テスト・オプション」を参照してください

データ・ソースからの接続を手動でテストするために、WebLogic Server管理コンソールのJDBCデータ・ソース: 監視: テスト・ページのデータ・ソースのテスト機能(JDBCデータ・ソースのテストを参照)、またはJDBCDataSourceRuntimeMBeantestPool()メソッドを使用できます。
JDBCDataSourceRuntimeMBean.testPool
データ・ソースからのデータベース接続をテストするには、データ・ソース構成で「予約された接続のテスト」を有効にし、「テスト対象の表名」を定義する必要があります。どちらも、WebLogic Server管理コンソールを使用してデータ・ソースを作成した場合には、デフォルトで定義されます。

データ・ソースをテストする場合、WebLogic Serverは接続を予約し、「テスト対象の表名」で定義した問合せを使用してそれをテストし、その後、接続を解放します。

データ・ソースの文キャッシュの管理

WebLogic Serverでは、各接続の文キャッシュがデータ・ソースに作成されます。接続でプリコンパイルされた文または呼び出し可能文が使用されると、WebLogic Serverはその文をキャッシュして、再利用できるようにします。

文キャッシュの詳細は、「文キャッシュによるパフォーマンスの向上」を参照してください

データ・ソース内の接続ごとに専用の文キャッシュがありますが、構成設定はデータ・ソース内のすべての接続に対して行われます。WebLogic Server管理コンソールを使用してデータ・ソースのすべての接続について文キャッシュをクリアすることも、プログラムを介して個々の接続について文キャッシュをクリアすることもできます。

ノート:

プリコンパイルされた文のキャッシュが有効になったWebLogicデータ・ソースに対して、JDBC 4.0 setPoolable(false)メソッドがコールされると、ドライバ・オブジェクトでメソッドがコールされるのに加え、文がキャッシュから削除されます。

データ・ソースの文キャッシュのクリア

データ・ソース内のすべての接続について文キャッシュを手動でクリアするには、WebLogic Server管理コンソールを使用するか、JDBCDataSourceRuntimeMBeanclearStatementCache()メソッドを使用します。

JDBCDataSourceRuntimeMBean.clearStatementCache

詳細は、Oracle WebLogic Server用のOracle Fusion Middleware管理コンソール・オンライン・ヘルプJDBCデータ・ソース内の文キャッシュのクリアおよびJDBCDataSourceRuntimeMBean.clearStatementCacheを参照してください。

単一接続用の文キャッシュのクリア

weblogic.jdbc.extensions.WLConnection.clearStatementCache()
weblogic.jdbc.extensions.WLConnection.clearCallableStatement(java.lang.
String sql)
weblogic.jdbc.extensions.WLConnection.clearCallableStatement(java.lang.
String sql,int resType,int resConcurrency)
weblogic.jdbc.extensions.WLConnection.clearPreparedStatement(java.lang.
String sql)
weblogic.jdbc.extensions.WLConnection.clearPreparedStatement(java.lang.
String sql,int resType,int resConcurrency)

weblogic.jdbc.extensions.WLConnectionインタフェースのメソッドを使用すると、単一の接続用の文キャッシュをクリアすることや、キャッシュから個々の文をクリアすることができます。これらのメソッドは、処理が正常に実行されるとtrueを返し、文が見つからなかったために処理が失敗するとfalseを返します。

プリコンパイルされた文と呼び出し可能文がキャッシュに格納されると、それらは、正確なSQL文に基づき、および結果セット・パラメータ(タイプおよび同時実行性オプション)がある場合はそれらに基づき格納(キー化)されます。個々のプリコンパイルされた文または呼び出し可能文をクリアする場合、適切な結果セット・パラメータを受け取るメソッドを使用する必要があります。たとえば、resSetTypeResultSet.TYPE_SCROLL_INSENSITIVEresSetConcurrencyResultSet.CONCUR_READ_ONLYのキャッシュ内に呼び出し可能文がある場合、結果セット・パラメータを受け取るメソッドを使用する必要があります。

clearCallableStatement(java.lang.String sql,int resSetType,int resSetConcurrency)

パラメータとしてSQL文字列のみを受け取るメソッドを使用する場合、メソッドは文を見つけられず、キャッシュからは何もクリアされず、メソッドはfalseを返します。

アプリケーションにより現在使用されている文をクリアすると、WebLogic Serverはその文をキャッシュから削除しますが閉じません。現在使用されてない文をクリアすると、WebLogic Serverはキャッシュからその文を削除して閉じます。

これらのメソッドの詳細は、WLConnectionのJavadocを参照してください。

接続プールの縮小

使用期間のピークが終了したときに、データ・ソースから接続を削除するには、「縮小」オプションを使用します。このオプションは、WebLogic ServerおよびDBMSのリソースを解放します。

データ・ソースには、プール内の接続の初期数、最小数および最大数を定義する一連のプロパティ(initialCapacityminCapacityおよびmaxCapacity)があります。すべての接続が使用されると、データ・ソースにより、プールに接続が1つ自動的に追加されます。プールがmaxCapacityに達すると、最大数の接続が開くことになり、データ・ソースで自動縮小を有効化するか、shrink()メソッドを使用してデータ・ソースを手動で縮小しないかぎり、それらの接続は開いたままになります。

接続の使用がピークを過ぎた後、データ・ソースから接続をいくつか削除して、WebLogic ServerとDBMSのリソースを解放できます。WebLogic Server管理コンソールのJDBCデータ・ソース: 制御ページの「縮小」オプション(Oracle WebLogic Server管理コンソール・オンライン・ヘルプJDBCデータ・ソース内の接続プールの縮小を参照)、またはJDBCDataSourceRuntimeMBeanshrink()メソッドを使用できます。

JDBCDataSourceRuntimeMBean.shrink

データ・ソースを縮小すると、WebLogic Serverは、プール内の接続の数を、minCapacityと現在使用中の接続数のうち、大きい方の数まで削減します。スラッシングを最小限にするために、プールは徐々に削減されます。自動縮小が実行されるたびに、未使用接続の数は半分に削減されます。

接続プールのリセット

「リセット」オプションを使用して、データ・ソース内の使用可能なすべてのデータベース接続をクローズして再作成します。

「リセット」オプションは、WebLogic Server管理コンソールの「JDBCデータ・ソース: 制御」ページ(『Oracle WebLogic Server管理コンソール・オンライン・ヘルプ』「JDBC データ ソース内の接続のリセット」を参照)、またはJDBCDataSourceRuntimeMBeanreset()メソッドで使用できます。
JDBCDataSourceRuntimeMBean.reset

これは、たとえば、DBMSが再起動された後に必要になることがあります。データ・ソース内の1つの接続が失敗したとき、多くの場合、プール内のすべての接続が不良です。

接続プールの中断

suspend()およびforceSuspend()オプションを使用して、データ・ソースを中断します。

「中断」および「強制中断」オプションは、WebLogic Server管理コンソールの「JDBCデータ・ソース: 制御」ページ(Oracle WebLogic Server管理コンソール・オンライン・ヘルプ「JDBC データ ソースの中断」を参照)、またはJDBCDataSourceRuntimeMBeansuspend()およびforceSuspend()メソッドで予約できます。

JDBCDataSourceRuntimeMBean.suspend
JDBCDataSourceRuntimeMBean.forceSuspend

データ・ソースを中断すると(強制中断ではない)、データ・ソースは無効とマークされ、アプリケーションはプール内の接続を予約できません。データ・ソース中断時にそのデータ・ソースからの接続をすでに予約していたアプリケーションは、その接続を使用しようとしたときに例外を受け取ります。データ・ソース内のすべての接続は、データ・ソースが中断される前とまったく同じ状態で保持されます。

データ・ソースを正常に中断すると、次の処理が発生します。

  • データ・ソースは、操作の開始時に即座に中断としてマークされ、そのデータ・ソースでそれ以上接続は作成されなくなります。

  • アイドル(非予約)接続は、無効としてマークされます。

  • 中断操作のタイムアウト期間の経過後、プールに残っているすべての接続は中断としてマークされ、接続に対する任意の操作でデータ・ソースが中断していることを示す次の例外がスローされます。

    java.sql.SQLRecoverableException: Connection has been administratively disabled. Try later.

  • 正常な停止操作の過程で正常な中断が行われた場合、それ以上の予約がなくなりタイムアウト期間が終了すると、接続はただちに閉じられます。正常な停止操作の過程で行われたのではない場合、接続はプールに残り、閉じられません。プールは再開する可能性があるためです。

正常な中断は、同期的または非同期的に実行できます。

同期操作にはメソッドのタイムアウト期間がありません。デフォルトでは、タイムアウト期間は60秒です。このタイムアウト期間の値は、Inactive Connection Timeout Secondsを0 (ゼロ)以外の値に構成(または動的に設定)することで変更できます。非アクティブ・タイムアウト期間に上限はありません。ただし、実際の処理では、使用中(予約済)のリソースが10分の1秒ごとにチェックされるため、タイムアウト値が2時間に設定され、すべての予約済リソースが1秒後に解放されると、停止は1秒後に完了します。

非同期操作のタイムアウト値は秒単位です。操作のステータスの確認に使用できるJDBCDataSourceTaskRuntimeMBeanを返します。getProgress()メソッドは、TaskRuntimeMBean.PROGRESS_SUCCESS ("success")、TaskRuntimeMBean.PROGRESS_FAILED ("failed")、またはTaskRuntimeMBean.PROGRESS_PROCESSING ("processing")を返します。getStatus()メソッドは"SUCCESS"、"FAILURE"および"PROCESSING"を返します。タスクMBeanは複数存在することができます。データ・ソースに対する次の操作コールによって、完了してから30分以上経過しているタスクのMBeanがクリーン・アップされます。中断または停止の操作が開始されると、その他の操作はただちに失敗しますが、タスクMBeanは作成され続けます。中断または停止がまだ実行中である場合、isRunning()メソッドはtrueを返します。操作のタイムアウトは、新規タスク操作のタイムアウト・パラメータで制御されます。0に設定した場合、デフォルトが使用されます。デフォルトでは、「非アクティブ接続タイムアウト(秒)」(設定されている場合)または60秒を使用します。タイムアウトを最小限にする場合は、値を1に設定します。タイムアウトを設定しない場合は、これを大きい値にします(非推奨)。

データ・ソースを強制中断すると、すべてのプール接続が破棄され、予約した接続を使用する以後の操作はすべて失敗します。クローズされた接続上のトランザクションはすべてロールバックされます。

接続プールの再開

中断したデータ・ソースを再利用するには、「再開」オプションを使用します。

「再開」オプションは、WebLogic Server管理コンソールの「JDBCデータ・ソース: 制御」ページ(『Oracle WebLogic Server管理コンソール・オンライン・ヘルプ』「中断されている JDBC データ ソースの再開」を参照)、またはJDBCDataSourceRuntimeMBeanresume()メソッドで使用できます。
JDBCDataSourceRuntimeMBean.resume
データ・ソースを再開すると、WebLogic Serverはデータ・ソースを有効とマークし、アプリケーションはデータ・ソースからの接続を予約できます。データ・ソースを中断した場合(強制中断ではない)、すべての接続が、中断前とまったく同じ状態で保持されます。データ・ソースの中断前に接続を予約していたクライアントは、中断が発生した時点の状態から作業を継続できます。データ・ソースを強制中断した場合、クライアントは、続行するために新しい接続を予約する必要があります。

ノート:

たとえば、データベース・サーバーが使用不可の場合など、正しく起動しなかったデータ・ソースは再開できません。

データ・ソースの停止

「停止」および「強制停止」オプションを使用して、データ・ソースを停止します。

「停止」および「強制停止」オプションは、WebLogic Server管理コンソールの「JDBCデータ・ソース: 制御」ページ(Oracle WebLogic Server管理コンソール・オンライン・ヘルプ「JDBC データ ソースの停止」を参照)、またはJDBCDataSourceRuntimeMBeanshutdown()およびforceShutdown()メソッドで使用できます。
JDBCDataSourceRuntimeMBean.shutdown
JDBCDataSourceRuntimeMBean.forceShutdown

正常な(強制ではない)データ・ソース停止操作では、最初にデータ・ソースを正常に中断し、次に関連するリソース(接続など)を解放します。データ・ソースの正常な中断の詳細は、上記の説明を参照してください。データ・ソースが正常に中断された後で、使用中の残りの接続がすべてクローズされ、データ・ソースが停止としてマークされます。

正常な停止は、同期的または非同期的に実行できます。

同期操作にはメソッドのタイムアウト期間がありません。タイムアウト期間のデフォルトは60秒です。これは、「非アクティブ接続タイムアウト(秒)」をゼロ以外の値に構成または動的に設定することで変更できます(接続リークのプロファイリングが有効になっている場合、この値は別の機能でオーバーロードされます)。非アクティブ・タイムアウトに上限はありません。ただし、実際の処理では、使用中(予約済)のリソースが10分の1秒ごとにチェックされるため、タイムアウト値が2時間に設定され、1秒後に終了した場合は、1秒後に完了します。

非同期操作のタイムアウト値は秒単位です。操作のステータスの確認に使用できるJDBCDataSourceTaskRuntimeMBeanを返します。getProgress()メソッドは、TaskRuntimeMBean.PROGRESS_SUCCESS ("success")、TaskRuntimeMBean.PROGRESS_FAILED ("failed")、またはTaskRuntimeMBean.PROGRESS_PROCESSING ("processing")を返します。getStatus()メソッドは"SUCCESS"、"FAILURE"および"PROCESSING"を返します。タスクMBeanは複数存在することができます。データ・ソースに対する次の操作コールによって、完了してから30分以上経過しているタスクのMBeanがクリーン・アップされます。中断または停止の操作が開始されると、その他の操作はただちに失敗しますが、タスクMBeanは作成され続けます。中断または停止がまだ実行中である場合、isRunning()メソッドはtrueを返します。操作のタイムアウトは、新規タスク操作のタイムアウト・パラメータで制御されます。0に設定した場合、デフォルトが使用されます。デフォルトでは、「非アクティブ接続タイムアウト(秒)」(設定されている場合)または60秒を使用します。タイムアウトを最小限にする場合は、値を1に設定します。タイムアウトを設定しない場合は、これを大きい値にします(非推奨)。

データ・ソースを強制停止すると、WebLogic Serverはデータ・ソース内のデータベース接続を閉じ、データ・ソースを停止します。現在の接続ユーザーはすべて強制的に接続解除されます。データ・ソースを停止するWLSTスクリプトの例は、例4-1のWLSTの例を参照してください。

データ・ソースの起動

「起動」オプションを使用して、停止されたデータ・ソースを起動します。

「起動」オプションとして、WebLogic Server管理コンソールの「JDBCデータ・ソース: 制御」ページまたはJDBCDataSourceRuntimeMBeanstart()メソッドを使用できます。
JDBCDataSourceRuntimeMBean.start
「起動」操作を呼び出すと、データ・ソースが再初期化され、接続が作成され、データ・ソースのヘルス状態が「実行中」に遷移します。

詳細は、Oracle WebLogic Server用のOracle Fusion Middleware管理コンソール・オンライン・ヘルプJDBCデータ・ソースの起動およびJDBCDataSourceRuntimeMBean.startを参照してください。

DBMSネットワーク障害の管理

-Dweblogic.resourcepool.max_test_wait_secs=xxに必要な時間を設定して、DBMSのネットワーク障害を管理します。

ここで、xxは時間(秒)であり、WebLogic Serverは、この時間接続テストを待機した後、接続テストが失敗したと見なします。デフォルトでは、サーバー・インスタンスに10秒の値が割り当てられます。

このコマンド行フラグにより、接続テストおよびアプリケーションが使用している接続を長期間(たとえば、10分)ハングさせるDBMSネットワーク障害などの障害が管理されます。割り当てられた期間が経過すると、サーバー・インスタンスは未使用の接続をパージし、アプリケーションが使用している接続を監視します。

DBMSがクライアントへの応答を一時的に停止し、既存の接続でサービスを再開する可能性がある場合、10秒という値により、ピーク時の負荷を許容する適切な時間が提供されます。ただし、待機時間が長すぎる場合、または短すぎる場合、サーバーを起動するために使用されるstartWebLogicスクリプトに、環境に合わせた値を含むフラグを追加します。時間の値をゼロ(0)秒に設定すると、サーバーは無限に待機します。