この章には次の項が含まれます:
JDBCDataSourceRuntimeMBean.testPool
データ・ソースのデータベース接続が常に正常であるように、接続を定期的にテストすることをお薦めします。WebLogic Serverでは、2種類の基本的なテストを使用できます。データ・ソースの属性を使用して構成する自動テストと、データ・ソースをトラブルシューティングするために実行できる手動テストです。
WebLogic Serverがプール接続の一貫性を自動的に維持できるようにすることで、DBMS接続のほとんどの問題を防止できます。自動接続テストの構成の詳細は、「データ・ソースの接続テスト・オプション」を参照してください
データ・ソースからの接続を手動でテストするために、WebLogic Server管理コンソールのJDBCデータ・ソース: 監視: テスト・ページのデータ・ソースのテスト機能(JDBCデータ・ソースのテストを参照)、またはJDBCDataSourceRuntimMBean
のtestPool()
メソッドを使用できます。データ・ソースからのデータベース接続をテストするには、データ・ソース構成で「予約された接続のテスト」を有効にし、「テスト対象の表名」を定義する必要があります。どちらも、WebLogic Server管理コンソールを使用してデータ・ソースを作成した場合には、デフォルトで定義されます。
データ・ソースをテストする場合、WebLogic Serverは接続を予約し、「テスト対象の表名」で定義した問合せを使用してそれをテストし、その後、接続を解放します。
システムのデータ・ソース内の接続ごとに、WebLogic Serverは文キャッシュを作成します。接続でプリコンパイルされた文または呼び出し可能文が使用されると、WebLogic Serverはその文をキャッシュして、再利用できるようにします。文キャッシュの詳細は、「文キャッシュによるパフォーマンスの向上」を参照してください
データ・ソース内の接続ごとに専用の文キャッシュがありますが、構成設定はデータ・ソース内のすべての接続に対して行われます。WebLogic Server管理コンソールを使用してデータ・ソースのすべての接続について文キャッシュをクリアすることも、プログラムを介して個々の接続について文キャッシュをクリアすることもできます。
注意:
プリコンパイルされた文のキャッシュが有効になったWebLogicデータ・ソースに対して、JDBC 4.0 setPoolable(false)
メソッドがコールされると、ドライバ・オブジェクトでメソッドがコールされるのに加え、文がキャッシュから削除されます。
JDBCDataSourceRuntimeMBean.clearStatementCache
データ・ソース内のすべての接続について文キャッシュを手動でクリアするには、WebLogic Server管理コンソールを使用するか(Oracle WebLogic Server管理コンソール・オンライン・ヘルプの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文に基づき、および結果セット・パラメータ(タイプおよび同時実行性オプション)がある場合はそれらに基づき格納(キー化)されます。個々のプリコンパイルされた文または呼び出し可能文をクリアする場合、適切な結果セット・パラメータを受け取るメソッドを使用する必要があります。たとえば、resSetType
がResultSet.TYPE_SCROLL_INSENSITIVE
でresSetConcurrency
がResultSet.CONCUR_READ_ONLY
のキャッシュ内に呼び出し可能文がある場合、結果セット・パラメータを受け取るメソッドを使用する必要があります。
clearCallableStatement(java.lang.String sql,int resSetType,int resSetConcurrency)
パラメータとしてSQL文字列のみを受け取るメソッドを使用する場合、メソッドは文を見つけられず、キャッシュからは何もクリアされず、メソッドはfalse
を返します。
アプリケーションにより現在使用されている文をクリアすると、WebLogic Serverはその文をキャッシュから削除しますが閉じません。現在使用されてない文をクリアすると、WebLogic Serverはキャッシュからその文を削除して閉じます。
これらのメソッドの詳細は、WLConnectionのJavadocを参照してください。
JDBCDataSourceRuntimeMBean.shrink
データ・ソースには、プール内の接続の初期数、最小数および最大数を定義する一連のプロパティ(initialCapacity
、minCapacity
およびmaxCapacity
)があります。すべての接続が使用されると、データ・ソースにより、プールに接続が1つ自動的に追加されます。プールがmaxCapacity
に達すると、最大数の接続が開くことになり、データ・ソースで自動縮小を有効化するか、shrink()
メソッドを使用してデータ・ソースを手動で縮小しないかぎり、それらの接続は開いたままになります。
接続の使用がピークを過ぎた後、データ・ソースから接続をいくつか削除して、WebLogic ServerとDBMSのリソースを解放できます。WebLogic Server管理コンソールのJDBCデータ・ソース: 制御ページの「縮小」オプション(Oracle WebLogic Server管理コンソール・オンライン・ヘルプのJDBCデータ・ソース内の接続プールの縮小を参照)、またはJDBCDataSourceRuntimeMBean
のshrink()
メソッドを使用できます。データ・ソースを縮小すると、WebLogic Serverは、プール内の接続の数を、minCapacity
と現在使用中の接続数のうち、大きい方の数まで削減します。スラッシングを最小限にするために、プールは徐々に削減されます。自動縮小が実行されるたびに、未使用接続の数は半分に削減されます。
JDBCDataSourceRuntimeMBean.reset
データ・ソース内の使用可能なすべてのデータベース接続を閉じて再作成するために、WebLogic Server管理コンソールのJDBCデータ・ソース: 制御ページの「リセット」オプション(Oracle WebLogic Server管理コンソール・オンライン・ヘルプのJDBCデータ・ソース内の接続のリセットを参照)、またはJDBCDataSourceRuntimeMBean
のreset()
メソッドを使用できます。これは、たとえば、DBMSが再起動された後に必要になることがあります。データ・ソース内の1つの接続が失敗したとき、多くの場合、プール内のすべての接続が不良です。
JDBCDataSourceRuntimeMBean.suspend JDBCDataSourceRuntimeMBean.forceSuspend
データ・ソースを中断するために、WebLogic Server管理コンソールのJDBCデータ・ソース: 制御ページの「中断」および「強制中断」オプション(Oracle WebLogic Server管理コンソール・オンライン・ヘルプのJDBCデータ・ソースの中断を参照)、またはJDBCDataSourceRuntimeMBean
のsuspend()
および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に設定した場合、デフォルトが使用されます。デフォルトでは、Inactive Connection Timeout Seconds(設定されている場合)または60秒を使用します。タイムアウトを最小限にする場合は、値を1に設定します。タイムアウトを設定しない場合は、これを大きい値にします(非推奨)。
データ・ソースを強制中断すると、すべてのプール接続が破棄され、予約した接続を使用する以後の操作はすべて失敗します。クローズされた接続上のトランザクションはすべてロールバックされます。
JDBCDataSourceRuntimeMBean.resume
中断したデータ・ソースを再有効化するために、WebLogic Server管理コンソールのJDBCデータ・ソース: 制御ページの「再開」オプション(Oracle WebLogic Server管理コンソール・オンライン・ヘルプの中断したJDBCデータ・ソースの再開を参照)、またはJDBCDataSourceRuntimeMBean
のresume()
メソッドを使用できます。データ・ソースを再開すると、WebLogic Serverはデータ・ソースを有効とマークし、アプリケーションはデータ・ソースからの接続を予約できます。データ・ソースを中断した場合(強制中断ではない)、すべての接続が、中断前とまったく同じ状態で保持されます。データ・ソースの中断前に接続を予約していたクライアントは、中断が発生した時点の状態から作業を継続できます。データ・ソースを強制中断した場合、クライアントは、続行するために新しい接続を予約する必要があります。
注意:
たとえば、データベース・サーバーが使用不可の場合など、正しく起動しなかったデータ・ソースは再開できません。
JDBCDataSourceRuntimeMBean.shutdown JDBCDataSourceRuntimeMBean.forceShutdown
データ・ソースを停止するために、WebLogic Server管理コンソールのJDBCデータ・ソース: 制御ページの「停止」および「強制停止」オプション(Oracle WebLogic Server管理コンソール・オンライン・ヘルプのJDBCデータ・ソースの停止を参照)、またはJDBCDataSourceRuntimeMBean
のshutdown()
および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に設定した場合、デフォルトが使用されます。デフォルトでは、Inactive Connection Timeout Seconds(設定されている場合)または60秒を使用します。タイムアウトを最小限にする場合は、値を1に設定します。タイムアウトを設定しない場合は、これを大きい値にします(非推奨)。
データ・ソースを強制停止すると、WebLogic Serverはデータ・ソース内のデータベース接続を閉じ、データ・ソースを停止します。現在の接続ユーザーはすべて強制的に接続解除されます。データ・ソースを停止するWLSTスクリプトの例は、例5-1のWLSTの例を参照してください。
JDBCDataSourceRuntimeMBean.start
データ・ソースを停止した後、WebLogic Server管理コンソールのJDBCデータ・ソース: 制御ページの「起動」オプション(Oracle WebLogic Server管理コンソール・オンライン・ヘルプのJDBCデータ・ソースの起動を参照)、またはJDBCDataSourceRuntimeMBean
のstart()
メソッドを使用できます。「開始」操作を呼び出すと、データ・ソースが再初期化され、接続が作成され、データ・ソースのヘルス状態が「実行中」に遷移します。
-Dweblogic.resourcepool.max_test_wait_secs=xx
ここで、xx
は時間(秒)であり、WebLogic Serverは、接続テストが失敗したと見なす前に接続テストを待機します。デフォルトでは、サーバー・インスタンスに10秒の値が割り当てられます。
このコマンド行フラグにより、接続テストおよびアプリケーションが使用している接続を長期間(たとえば、10分)ハングさせるDBMSネットワーク障害などの障害が管理されます。割り当てられた期間が経過すると、サーバー・インスタンスは未使用の接続をパージし、アプリケーションが使用している接続を監視します。
DBMSがクライアントへの応答を一時的に停止し、既存の接続でサービスを再開する可能性がある場合、10秒という値により、ピーク時の負荷を許容する適切な時間が提供されます。ただし、待機時間が長すぎる場合、または短すぎる場合、サーバーを起動するために使用されるstartWebLogic
スクリプトに、環境に合わせた値を含むフラグを追加します。時間の値をゼロ(0)秒に設定すると、サーバーは無限に待機します。