none
READ_COMMITTED_SNAPSHOT ONが効いていない RRS feed

  • 質問

  • みなさんこんにちは

    今回SQLSERVER2005(SP2)でトランザクション分離レベルをスナップショット(READ_COMMITTED_SNAPSHOT ON)にしたプロジェクトで作業しております。
    このトランザクション分離レベルにした場合、排他ロック中にデータの読み込み(共有ロック)を行った場合、
    排他ロックが行われているトランザクションの発生時のデータを読み込んでくると認識していましたが、
    ロック待ち状態になってしまいます。

    どなたか解決策をご存知の方はいらっしゃいましたらご教授願います。


    排他ロックのSQL文
    ---------------------------------------------------------
    BEGIN TRANSACTION     TR2
         UPDATE KM_地域 SET 地域名 = 'テスト地域001変更済2' WHERE 地域コード = '001'
    ----------------------------------------------------------

    共有ロックのSQL文
    ---------------------------------------------------------
    SELECT * FROM KM_地域 WHERE 地域コード = '001'
    ----------------------------------------------------------

    結果 → ロック待ちになります。

    ちなみに事前にデータベースの設定を変えております。
    ------------------------------------------------------------------
    ALTER DATABASE データベース名
    SET READ_COMMITTED_SNAPSHOT ON
    ------------------------------------------------------------------



    2008年5月22日 10:04

回答

  • 以下を実行する必要があります。

     

    SET ALLOW_SNAPSHOT_ISOLATION ON

    SET TRANSACTION ISOLATION LEVEL SNAPSHOT

     

    なお、スナップショット分離レベルしか使用しないのであれば、SET READ_COMMITTED_SNAPSHOT ON
    は必要ありません。

    2008年5月22日 15:16

すべての返信

  • 以下を実行する必要があります。

     

    SET ALLOW_SNAPSHOT_ISOLATION ON

    SET TRANSACTION ISOLATION LEVEL SNAPSHOT

     

    なお、スナップショット分離レベルしか使用しないのであれば、SET READ_COMMITTED_SNAPSHOT ON
    は必要ありません。

    2008年5月22日 15:16
  • こんにちは ! 中川 俊輔です。

     

    trapemiya さん、回答ありがとうございます。

     

    ロジック7さん、フォーラムのご利用ありがとうございます。

    その後いかがでしょうか?

    有用な情報と思われたため、trapemiyaさんの回答へ回答済みチェックをつけさせていただきました。

     

    回答済みチェックが付くことにより、有用な情報を探している方が情報を見つけやすくなります。
    有用な情報と思われる回答があった場合は、なるべく回答済みボタンを押してチェックを付けてください。

    ロジック7さんはチェックを解除することもできますので、ご確認ください。

    それでは!

     

    2008年6月16日 9:42