3.5.4 ホールダブルカーソル
(1) ホールダブルカーソルとは
ホールダブルカーソルとは,COMMIT文を実行しても閉じないカーソルのことをいいます。
Type4 JDBCドライバでは,コミット実行後もResultSetオブジェクトを有効にする場合に,ホールダブルカーソル機能を使用します。
- 埋込み型UAPの場合
-
ホールダブルカーソルを使用する場合,DECLARE CURSORにUNTIL DISCONNECT,又はWITH HOLDを指定してカーソルを宣言します。この指定をすると,CLOSE文,DISCONNECT文,又はROLLBACK文(エラー発生などで暗黙的に実行されるROLLBACKやDISCONNECT処理を含む)を実行するまでカーソルを開いたままにできます。
- Type4 JDBCドライバの場合
-
コミット実行後もResultSetオブジェクトを有効にする場合,次のどれかを指定してください。これらの指定をした場合,ホールダブルカーソルを使用します。
-
DriverManager.getConnectionメソッドの引数で,ユーザプロパティHIRDB_CURSORにTRUEを指定する。
-
DriverManager.getConnectionメソッドの引数で,URLにHIRDB_CURSOR=TRUEを指定する。
-
PrdbDataSource,PrdbConnectionPoolDataSource,PrdbXADataSourceクラスのsetHiRDBCursorModeメソッドの引数で,trueを指定する。
-
Connection.setHoldabilityメソッドの引数で,ResultSet.HOLD_CURSORS_OVER_COMMITを指定する。
-
SELECT文にUNTIL DISCONNECTを指定する。
-
次のメソッドの引数で,ResultSetの保持機能としてResultSet.HOLD_CURSORS_OVER_COMMITを指定する。
Connection.createStatement
Connection.prepareStatement
Connection.prepareCall
また,次のどれかを実行するまで,ResultSetオブジェクトを有効なまま(ホールダブルカーソルを開いたまま)にできます。
-
ResultSet.close
-
Statement.close
-
Connection.close(エラー発生時に,システムによって自動的に実行される切断処理も含む)
-
Connection.rollback,XAResource.rollback(エラー発生時に,システムによって自動的に実行されるロールバックも含む)
-
すべての検索行を取得
-
(2) ホールダブルカーソル使用時の効果
ホールダブルカーソルを使用すると,大量のデータを検索,又は更新する場合に,途中でCOMMIT文を実行できるため,排他資源の削減に有効となります。また,カーソルを開いたままCOMMIT文を実行できるので,大量のデータを検索,又は更新する(トランザクションを長時間実行する)場合でも,シンクポイントを有効にし,再開始時の時間を短縮できます。
(3) ホールダブルカーソル使用時の処理
ホールダブルカーソルを使用した場合,作業表用ファイルの削除,及び作業表用ワークバッファの解放は,その作業表用ファイルを作成したホールダブルカーソルのクローズ後のコミットで行われます。
ホールダブルカーソルをオープンした場合,各バックエンドサーバプロセスは,トランザクションがなくても占有されます。したがって,ホールダブルカーソルを使用する場合は,最大サーバプロセス数の見積もり時に注意する必要があります。
UNITIL DISCONNECT指定のLOCK文の実行有無と,作業表を作成する検索,又はパラレルスキャンの有無によって,トランザクションを超えて引き継ぐ排他資源が異なります。引き継ぐ排他資源を次に示します。
- [説明]
-
図中の番号の説明を次に示します。
番号
UNITIL DISCONNECT指定のLOCK文の実行
作業表を作成する検索,又はパラレルスキャン
引き継ぐ排他資源
1
あり
該当しません
LOCK文の資源だけ引き継ぎます。
2
なし
あり
すべての資源を引き継ぎます。
3
なし
カーソル位置の資源だけ引き継ぎます。
OLTP環境下のUAPでホールダブルカーソルを使用する場合,HiRDBのシステム定義のpd_oltp_holdcrオペランドにuseを指定する必要があります。
また,OLTP環境下のUAPでホールダブルカーソルを使用する場合は,次の条件を満たす必要があります。
-
X/Openに準拠したAPIを使用してHiRDBにアクセスするUAPである。
-
ホールダブルカーソルを使用するUAPのサービス関数は,ホールダブルカーソルをオープンした後,該当するサービス関数がreturnする前に,カーソルの後処理をする。※
- 注※
-
カーソルの後処理をする方法を次に示します。
-
カーソルのクローズ
-
ROLLBACK文実行
-
DISCONNECT文実行
-
UAPの終了
-
UAPのサービス関数からのSQLの実行シーケンスを次に示します。図中のトランザクション開始API,カーソルOPEN,カーソルCLOSE,及びCOMMIT APIの順序関係に注意してください。
- [説明]
-
-
カーソルの保持範囲
-
トランザクションの範囲
-
(4) ホールダブルカーソルの同時オープン数の上限
UNTIL DISCONNECT指定のLOCK文を実行しない表に対して,ホールダブルカーソルを使用する場合,そのホールダブルカーソルのトランザクション当たりの最大同時オープン数を,システム定義pd_max_open_holdable_cursorsに指定してください。