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