• ベストアンサー

DB2でSelectした時(rollback,commitの必要性)

Oracleでの開発が長く、DB2は初めてなので戸惑ってます。 OracleでSelect文を発行する時はトランザクション処理が発生しているわけではないので、rollbackやcommitはしないのですが、DB2を使った今回のシステムではselectをした後でrollbackやcommitを使用するように設計書記述がされています。 必要ないような気がするのですが、DB2ではSelectでも必須なのでしょうか? ご回答よろしくお願いします。

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

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

そもそも、SELECT文であってもトランザクションは発生しています。DB2に限らず、ORACLEでもSQL Serverでも、DBMSならば皆そうです。もし明示的に行っていなかったとしても、暗黙的には最終的にCOMMIT/ROLLBACKがされているはずです。 ORACLEの場合、コミット前の修正中のレコードに関しては、UNDOセグメントの内容を見せるのに対して、DB2やSQLServerではロック待ちになりますね。このあたりはDBMSの考え方の違いによるものであり、面白いところです。 細かい話になりますが、トランザクションの「分離レベル」の設定により、SELECT時の取られるロックが変わってきます。 ロックに関しては、 http://www-6.ibm.com/jp/software/data/db2univ/lab/ise/techlib/v71design_05.html を読んでみてください。一番わかりやすい日本語のドキュメントじゃないかしら。。

A_Bone
質問者

お礼

判り易いサイトのご紹介ありがとうございます。 114ページは読むのにちょっと時間かかりましたが、確かに判り易いです。 DB2の開発が初めてだったので、色々Oracleとの違いが判って面白いですね。 ご回答ありがとうございました。

その他の回答 (1)

  • yukion
  • ベストアンサー率42% (3/7)
回答No.1

それはLockを解放するいう意味で必要です。SELECTであっても他のアプリケーションからの更新等を防ぐためにLockは取得されているのでトランザクション(作業単位-UR)の終了を明示的に知らせるためにCOMMITを発行します。 明示的にCOMMITを出さないとアプリケーションの終了のように暗黙的なCommitになるまでLockは保持され、他のアプリケーションが待たされる可能性があります。 どのようなタイプのLockが取得されるか・Lockされる期間は設定により変わりますので、ちょっと勉強が必要ですが、考え方はORACLEと共通だと思います。

A_Bone
質問者

お礼

質問をした後で偶然見つけたサイトにて、selectを実行した後で明示的にCommit,rollbackを行わないのはOracle位と言う事が判りました。 「普通、RDBMSではREAD COMMITEDをおこなうためにSELECTでSHARED LOCKを発行する方が主流」 とのこと。ひとつ勉強になりました。 ご回答ありがとうございました。

関連するQ&A