web-dev-qa-db-ja.com

SET TRANSACTION ISOLATION LEVEL SERIALIZABLEの後にコミットされた読み取りを追加しますか?

ストアドプロシージャの内部には、次のものが含まれています。(SQL Server 2008)

 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
 BEGIN TRANSACTION getStuff
 BEGIN TRY 
    /*  some selects, updates, etc, etc. */
    ....
    COMMIT TRANSACTION getStuff
 END TRY
 BEGIN CATCH 
   ...
 END CATCH

これはトランザクションベースであるため、残りのデータベース接続はSERIALIZABLEの影響を受けないと考えました。

コミット後にコミットされた読み取りに暗黙的に分離レベルを設定する必要がありますか?これは、アプリケーションサーバーとデータベースサーバー間の他の接続に悪影響を及ぼしますか?

9
CFNinja

コマンドはTRANSACTION ISOLATION LEVELではなくSERVER ISOLATION LEVELです。トランザクションスコープの分離レベルのみが変更されます。

6
Erik Darling

いいえ、コミットレベルの読み取りに暗黙的に分離レベルを戻す必要はありません。

本から オンライン

ストアドプロシージャまたはトリガーでSET TRANSACTION ISOLATION LEVELを発行すると、オブジェクトが制御を返すと、分離レベルは、オブジェクトが呼び出されたときに有効だったレベルにリセットされます。たとえば、REPEATABLE READをバッチで設定し、そのバッチが分離レベルをSERIALIZABLEに設定するストアドプロシージャを呼び出すと、ストアドプロシージャが制御をバッチに戻すと、分離レベルの設定はREPEATABLE READに戻ります。

5
SqlWorldWide

投稿したコマンドは、SP with TRANSACTION ISOLATION LEVEL SERIALIZABLE。他の接続はデフォルトでデフォルトの分離レベルに設定されます-コミットされた読み取り(明示的に別の分離レベルを指定しない限り)。

Paul Whiteによる優れたシリーズがあります- SQL Server分離レベル:Aシリーズ は、さまざまな分離レベルが何を意味するかを理解し、それらを使用するときに何を行うかを理解するのに役立ちます。

3
Kin Shah