トランザクション分離レベルのスコープ
-
20-08-2019 - |
質問
SQL Server 2005でトランザクション分離レベルのためのスコープ規則は何ですか?私は、さまざまなレベルが何を意味するか知っているが、正常に手動で実行するスクリプトの外にそれらを適用していませんか。私は、生産品質のコードでの実用化のためのガイドを見つけることができません。
あなたは、このようなコマンドを使用する場合、もちろん、スコープが始まります:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
しかし、ここでそれが終わるのでしょうか?私は、ストアドプロシージャ内のisoレベルを設定し、そのprocは別のものを呼び出す場合、ネストされたprocが、それを継承していますか?さらに良いことに、私はネストされたprocの内部のisoレベルは、それが呼び出し元のprocのに戻って実行するために起こっているエスカレートか?やるトランザクションは任意の違いを作るTRAN、ROLLBACKを開始し、COMMITのようなコマンド?
ストアドプロシージャは、分離レベルの変更が何らかの方法で持続ないアプリケーションまたはエージェントジョブによって呼び出されたとき?私はいつも、各PROCの終わりでコミットデフォルトのREADに戻す必要がありますか?
私は、さまざまな状況でそれをテストするだろうが、私は現在の分離レベルに設定されるものを読むのか分からない。
解決
以下を実行して、自分のために参照してください。
CREATE PROCEDURE dbo.KeepsIsolation
AS
BEGIN
PRINT 'Inside sproc that does not change isolation level';
DBCC USEROPTIONS;
END
GO
CREATE PROCEDURE dbo.ChangesIsolation
AS
BEGIN
PRINT 'Inside sproc that changes isolation level';
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
DBCC USEROPTIONS;
END
GO
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
DBCC USEROPTIONS;
EXEC dbo.KeepsIsolation;
DBCC USEROPTIONS;
EXEC dbo.ChangesIsolation;
-- demonstrates that isolation level restored to REPEATABLE READ after exiting the procedure
DBCC USEROPTIONS;
他のヒント
から MSDN の
あなたはSETトランザクション分離レベルを発行する場合のストアドプロシージャでののか トリガは、オブジェクト戻り、分離レベルを制御する際のリセットされます オブジェクトが呼び出された効果でレベルへの。たとえば、 あなたはバッチでREPEATABLE READを設定し、次いでバッチを保存し呼び出します SERIALIZABLEに分離レベルを設定する手順、単離 レベルの設定は、いつストアドプロシージャREPEATABLE READに戻ります リターンはバッチに制御します。
DBCC USEROPTIONS
他のSETオプションの全てと共に、現在の分離レベルを表示します。
ラインに関する書籍から
唯一のトランザクション分離 LEVELオプションは、一度に設定することができ、 そしてそれは、その接続用に設定されたまま それが明示的に変更されるまで。この ない限り、デフォルトの動作となり、 最適化オプションがで指定されています のFROM句にテーブルレベル 声明ます。
分離レベルは、トランザクションをロールバックしません。
分離レベルを使用すると、手続きや関数を呼び出す場合でも、現在のままです。
これは、実際の接続の閉鎖渡って持続できる場所高性能ADO.NET接続プーリングを使用する場合の問題は、トランザクション・レベルとのSQLServer 2012またはそれ以前の範囲にありますのでご注意ください
SQL Serverの:プールされた接続間で分離レベルがリークする
<のhref = "https://social.msdn.microsoft.com/Forums/sqlserver/en-US/916b3d8a-c464-4ad5-8901-6f845a2a3447/sql-server-2014-reseting-isolation-level?フォーラム= sqldatabaseengine」のrel = "nofollowをnoreferrer"> https://social.msdn.microsoft.com/Forums/sqlserver/en-US/916b3d8a-c464-4ad5-8901-6f845a2a3447/sql-server-2014-reseting-isolationレベルの?フォーラム= sqldatabaseengineする