スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド
FETCHを実行するとき,又は1行SELECT文を実行するときの排他制御モードはカーソル宣言時,動的SELECT文,又は1行SELECT文の前処理時の排他オプションが優先されます。排他オプションの指定がない場合は,データ保証レベル(データ保証レベル指定がない場合は2を仮定)に従います。データ保証レベルは,クライアント環境定義のPDISLLVL,又は手続き定義時若しくはトリガ定義時に指定するSQLコンパイルオプションのISOLATION LEVELで指定します。このとき,カーソルを使用した更新(又は削除)の有無,FOR UPDATE時のWITH EXCLUSIVE LOCK仮定によっても影響を受けます。
FOR UPDATE時のWITH EXCLUSIVE LOCK仮定の指定は,クライアント環境定義のPDFORUPDATEEXLOCK,手続き定義時又はトリガ定義時のSQLコンパイルオプションのデータ保証レベル(FOR UPDATE EXCLUSIVEを指定)で行います。
カーソル宣言時(DECLARE CURSOR)の排他オプション,カーソル宣言(DECLARE CURSOR)やカーソル割当て(ALLOCATE CURSOR)に指定した動的SELECT文の排他オプション,又は1行SELECT文に指定した排他オプションによって,実行時の排他制御モードが異なります。カーソル宣言時,又は動的SELECT文前処理時の排他オプションと表操作時の排他オプションの関係を次の表に示します。
なお,カーソル宣言時の排他オプションについては,マニュアル「HiRDB Version 8 SQLリファレンス」を参照してください。
表3-27 カーソル宣言時,又は動的SELECT文前処理時の排他オプションと表操作時の排他オプションの関係
SQL文中の排他オプション | FOR UPDATE時のWITH EXCLUSIVE LOCK仮定 | データ保証レベル | カーソルを使用した更新許可※1 | 表操作時の排他オプション,及びFOR UPDATE句の仮定値 | |
---|---|---|---|---|---|
あり | WITH EXCLUSIVE LOCK | −※2 | −※2 | なし | WITH EXCLUSIVE LOCK |
あり | WITH EXCLUSIVE LOCK FOR UPDATE | ||||
WITH SHARE LOCK | なし | WITH SHARE LOCK | |||
あり | WITH SHARE LOCK FOR UPDATE | ||||
WITHOUT LOCK WAIT | なし | WITHOUT LOCK WAIT | |||
あり | WITHOUT LOCK WAIT FOR UPDATE | ||||
WITHOUT LOCK NOWAIT | なし | WITHOUT LOCK NOWAIT | |||
あり | エラー | ||||
なし | あり | 2 | なし | WITH SHARE LOCK | |
あり | WITH EXCLUSIVE LOCK FOR UPDATE | ||||
1 | なし | WITHOUT LOCK WAIT | |||
あり | WITH EXCLUSIVE LOCK FOR UPDATE | ||||
0 | なし | WITHOUT LOCK NOWAIT | |||
あり | WITH EXCLUSIVE LOCK FOR UPDATE | ||||
なし | 2 | なし | WITH SHARE LOCK | ||
あり | WITH EXCLUSIVE LOCK FOR UPDATE | ||||
1 | なし | WITHOUT LOCK WAIT | |||
あり | WITHOUT LOCK WAIT FOR UPDATE | ||||
0 | なし | WITHOUT LOCK NOWAIT | |||
あり | WITHOUT LOCK WAIT FOR UPDATE |
HiRDBでは,カーソルを開くと,1回目のFETCH文で検索対象のすべての行を読み込むので,排他制御のためのバッファが不足する場合があります。これは,内部的な作業表の作成によってオーバヘッドが増加するからです。したがって,カーソルを使用した操作をする場合,あらかじめ探索条件で対象となる行を絞り込む必要があります。
なお,対象となる行を絞り込むことができない場合は,排他の単位を変更するなど排他制御の抑止を検討する必要があります。排他制御の抑止については,「3.4.8 UAPでできる排他制御」を参照してください。
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.