SQL Server 2005のトランザクション分離レベル(Snapshot)

SQL Server 2005」からトランザクション分離レベルに「SNAPSHOT」が追加され、
Oracle Databaseで言うところの「READ COMMITTED」と同じを動作する。


ただし、データベースに対して、SNAPSHOTモードを有効にする必要がある。
SNAPSHOTモードを有効にすると、それだけで「READ COMMITTED」が「Oracle Database」と
同様の動作を行うようになる。(共有ロックされない)


それとは別に、「TRANSACTION ISOLATION LEVEL」に「SNAPSHOT」を指定することが
できるようになる。実際のところ「READ COMMITTED」と「SNAPSHOT」の違いが
良く分からない。
少し調べてみると、「SNAPSHOT」は、共通のスナップショットを共有するのか、
複数のトランザクションで同じ行を更新すると下記のエラーが発生するので、注意が必要。



メッセージ 3960、レベル 16、状態 2、行 2
更新の競合により、スナップショット分離トランザクションが中断しました。スナップショット分離を
使用してデータベース 'DB' のテーブル 'TBL' に直接または間接的にアクセスし、別のトランザクション
によって変更または削除された行を更新、削除、または挿入することはできません。トランザクション
再試行するか、更新/削除ステートメントの分離レベルを変更してください。