アプリ版:「スタンプのみでお礼する」機能のリリースについて

DB2 v7を使用しています。
select文で更新ロックをかけました。
PreparedStatementとresultsetをcloseした後、同Connectionでupdate文をかけました。
このとき、select文のロックがかかってるのかわかりませんが、エラーも出ずに更新ができませんでした。
更新ロックのかけ方は 普通のselect文の最後に for updateとしただけです。updateは普通にupdateを行いました。

現在の状況としては、更新ロックがかかっているのかどうかわからないという状態です。
そこで、
(1)更新ロックがかかっているのかどうかを調べる方法があれば、その方法が知りたい。
(2)更新ロックの解除の方法をしりたい。
(3)select文で更新ロックをかけた場合の特別なupdateの方法が、その方法をしりたい。

どなたかご存知のかたがいらっしゃいましたらご教授くださいますようよろしくお願いいたします。

win2000
jdk1.3

A 回答 (1件)

(1)


db2のコマンドウィンドウから「db2 get snapshot for locks on データベース名」とするとロックの一覧を参照できます。どのアプリケーションがどのようなロックを取得しているかがわかります。また、更新ロックを保持している間に他のコネクションから該当行(テーブルロックの場合は該当テーブル)に対して更新を行えないことで確認できます。この際にロックタイムアウトまでの待ち時間を無限に設定していると、いつまでたってもロック獲得待ちのままになります。
(2)
コミットまたはロールバックでロックは解除されます。このことはすべてのロックに関していえます。
(3)
特別な方法はありません。更新ロックを獲得した後は同一コネクションからであれば排他ロックを獲得できます(更新できます)。

よく覚えていませんが、更新ロックに関してもロック保持期間が分離レベルで異なっていたような気がします。特に指定しなければ分離レベルはCS(ReadCommited)ですので、(コミットやロールバックを行わなくても)カーソルが離れた瞬間にロックが開放された気がします。
    • good
    • 0
この回答へのお礼

返答ありがとうございます。
結果としては、教えていただいたコマンドを実行したところ、該当テーブルにロックがかかりっぱなしになっていました。原因は、開発途中に一度更新ロックの設定をしたSQLを流したまま、コミットしていなかったのではないかと思われます。
ロールバックして、再起動(念のため)を行ったら、ロックが解除され、うまくいきました。
親切に説明していただき、ありがとうございました。

お礼日時:2005/08/28 19:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!