ハロウィーン問題はデータベースの更新処理をによって更新されたレコードのデータベース上の位置が変更されることによって、同じレコードが何度も更新されてしまう問題を指す。こんな名前なのは、ハロウィーンに発見された歴史的経緯から。
ポイントとなるのは、
- テーブルやインデックスのスキャン
- そのスキャンによって読み込まれるレコードを変更すること
- 変更によってレコードの位置をこれからスキャンされる位置に移動させること
結果として、スキャンによって更新されたレコードがまたスキャンで読み込まれてしまい再度更新されるという結果になってしまう。
具体的にはカーソルを使った照会と更新を行うときに問題が発生しうる。JDBCを使っている場合もそうだが、カーソルを使った更新をするときには、カーソル更新の結果が照会に反映されるか注意が必要である。
この問題を避けるためには、更新が照会に影響を及ぼさないようにすれば良い。
DB2 9.7.2以降を使っている場合は、カーソルを使用する際には、INSENSITIVE指定をすることで、スキャンの開始時点で照会結果が確定されるので、この問題を避けることができる。