Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


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でホールダブルカーソルを使用する場合は,次の条件を満たす必要があります。

注※

カーソルの後処理をする方法を次に示します。

  1. カーソルのクローズ

  2. ROLLBACK文実行

  3. DISCONNECT文実行

  4. UAPの終了

UAPのサービス関数からのSQLの実行シーケンスを次に示します。図中のトランザクション開始API,カーソルOPEN,カーソルCLOSE,及びCOMMIT APIの順序関係に注意してください。

[図データ]

[説明]
  1. カーソルの保持範囲

  2. トランザクションの範囲

(4) ホールダブルカーソルの同時オープン数の上限

UNTIL DISCONNECT指定のLOCK文を実行しない表に対して,ホールダブルカーソルを使用する場合,そのホールダブルカーソルのトランザクション当たりの最大同時オープン数を,システム定義pd_max_open_holdable_cursorsに指定してください。