[DB][DB2] SELECT文で排他ロックを取得する方法


カーソルで「FOR UPDATE WITH RS」付きでSELECTを実行する
この場合
SELECT行にUロックが取られ
UPDATEが実行されて COMMITされるまでロック開放されない
※カーソル(Positioned Update)使用しないと
分離レベルCSでは
FOR UPDATE付きでも SELECTの完了時点でUロックが外れてしまう

カーソル使用サンプル: $HOME/sqllib/samples/java/jdbc/TbMod.java



分離レベルをRSにしてSELECT実行する
この場合
カーソルを使用しなくてもよい
分離レベルRSでSELECTを実行すれば
SELECTが完了した後も
同一トランザクション中は
Uロックが保持されたままになり
他のプロセスを排他できる



「WITH RS USE AND KEEP UPDATE LOCKS」でSELECT実行する
この場合
SELECT行にUロックが取られ
UPDATEが実行されて COMMITされるまでロック開放されない


*Positioned Update
FOR UPDATEつきのSelect実行後
getCursor()にてカーソルを取得し
WHERE CURRENT OFカーソル名
という条件をつけたUpdateを実行する


*Uロック
分離レベルCS/RSでFOR UPDATE付きのSQLを実行した場合に
FETCH対象の行に対して取得する排他ロック



ref:
DB2: Select for update文の仕様について, 2007/07/26
http://www-01.ibm.com/support/docview.wss?uid=std327fede7ab1fcd7ab4925732b0007cc2c
DB2: select の for update オプションについて, 2007/03/02
http://www-01.ibm.com/support/docview.wss?uid=std39618094eadfe49a0492572a200825158

tag : DB2 CS RS RR SELECT_FOR_UPDATE

2009-10-29 23:09 : 開発 : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud