• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DB2の更新ロックについて)

DB2の更新ロックについて

このQ&Aのポイント
  • DB2 v7を使用しています。select文で更新ロックをかけた場合、更新ができない状況になりました。現在の状況としては、更新ロックがかかっているのかどうかわからない状態です。どのように更新ロックがかかっているのか調べる方法や、解除する方法について教えていただきたいです。
  • DB2 v7を使用しています。select文にfor updateを付けて更新ロックをかけましたが、エラーも出ずに更新ができませんでした。更新ロックがかかっているのかどうかを調べる方法や、更新ロックの解除方法について知りたいです。
  • DB2 v7を使用しています。select文で更新ロックをかけた場合、エラーなく更新ができませんでした。解除方法や、特別なupdateの方法について教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • yheees
  • ベストアンサー率100% (1/1)
回答No.1

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

PINK_EGG
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A