ストアドプロシージャの内部には、次のものが含まれています。(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の影響を受けないと考えました。
コミット後にコミットされた読み取りに暗黙的に分離レベルを設定する必要がありますか?これは、アプリケーションサーバーとデータベースサーバー間の他の接続に悪影響を及ぼしますか?
コマンドはTRANSACTION ISOLATION LEVEL
ではなくSERVER ISOLATION LEVEL
です。トランザクションスコープの分離レベルのみが変更されます。
いいえ、コミットレベルの読み取りに暗黙的に分離レベルを戻す必要はありません。
本から オンライン 。
ストアドプロシージャまたはトリガーでSET TRANSACTION ISOLATION LEVELを発行すると、オブジェクトが制御を返すと、分離レベルは、オブジェクトが呼び出されたときに有効だったレベルにリセットされます。たとえば、REPEATABLE READをバッチで設定し、そのバッチが分離レベルをSERIALIZABLEに設定するストアドプロシージャを呼び出すと、ストアドプロシージャが制御をバッチに戻すと、分離レベルの設定はREPEATABLE READに戻ります。
投稿したコマンドは、SP with TRANSACTION ISOLATION LEVEL SERIALIZABLE
。他の接続はデフォルトでデフォルトの分離レベルに設定されます-コミットされた読み取り(明示的に別の分離レベルを指定しない限り)。
Paul Whiteによる優れたシリーズがあります- SQL Server分離レベル:Aシリーズ は、さまざまな分離レベルが何を意味するかを理解し、それらを使用するときに何を行うかを理解するのに役立ちます。