Isolation Levels

MSDTC, COM+ or EnterpriseServices are allowing you to specify an isolation level for transactions so that you can increase concurrency to improve performance and scalability.

But, the value you set for the isolation level is used by MSDTC only to pass it to the resource manager(s), more like a hint rather than a restriction. It is the responsibility of the resource manager to use this isolation level accordingly.


The MSDTC transaction will always carry the same isolation level which is the one that was initially specified when the transaction was created. It cannot be changed later. Some resource managers allow you to change the isolation level. For instance, the isolation level that SQL Server is using on a connection can be changed using “SET TRANSACTION ISOLATION LEVEL”. Changing the isolation level at statement level inside SQL Server or any other resource manager is invisible to MSDTC. This is why mixing MSDTC transaction isolation levels with resource manager statement level isolation levels is not recommended.

Comments (2)

  1. Shawn Smith says:

    Having Biztalk do some Database work from an AIC is about the worst. Biztalk enforces the use of an isolation level serialized transaction as it is the root, then your componet gets stuck in this over the top isoloation level. About the best thing you can do is hint your connections in your code to use ‘read committed’