なんとなく応用情報技術者試験の過去問を解いていた。
平成26年度春の午後問題問4の設問4。問題は長いので、要点だけ説明すると、
下の画像の処理フローについて

このフローでプログラム作ったら、DB更新失敗したときに、操作ログ表が書き込まれなかった。なんとかしてくれ。って問題。
IT関係の仕事やってる人なら、あるあるだと思います。
少し考えれば、更新失敗時のDBロールバックでログも一緒にロールバックしているのが原因というのが分かるかと思います。
そして、これの誰もが思いつく改善策は
「ログ表と予約表、予約明細票を別トランザクションにすればいい」
です。
しかし、よく考えて欲しい。
この試験は応用情報処理試験。こんな単純な対策が答えであるわけがない。
そして、考える。
これ、別トランザクションにしたら、更新成功/失敗状況によっては、ログと予約表、予約明細票で不整合が起こる可能性あるよね。(予約表は更新されてるのに、ログは更新失敗する等)
この問題を解決する方法があるはずだ。
あ、そうだ
トランザクション前にログ表に更新失敗で挿入し、成功時はコミット前にログ表を更新成功に書き換えればいいんだ
これで完璧なはずだ
答えを見て確認しよう・・・
!
なんでだよ
こんなのは一例で、応用情報には悪問と思しき問題や、理不尽な問題、注意深く問題文を読まないと引っかかりそうな問題等がたくさん潜んでいます。
応用情報受からないって人はよく聞くけど、その理由がわかった気がします。
今回紹介した問題のフルバージョンは、検索すればいろんなサイトが見つかると思います。
例えばこことか → http://www.ap-siken.com/kakomon/26_haru/
