2

je besoin d'un éclaircissement de la SP-DTC se comportera dans le scénario ci-dessousniveau MSDTC et l'isolement

1) J'ai plus d'une connexion à l'intérieur d'un TransactionScope (niveau d'isolation - ReadCommited), qui apportera MS- DTC en action maintenant:

a) MS-DTC changera-t-il automatiquement le niveau d'isolement en SERIALIZABLE. B) (Imp) Si la réponse ci-dessus est oui et j'ai implémenté le niveau d'isolation basé sur la version Row, en plus de TransactionScope, j'ai également activé l'option de base de données READ_COMMITTED_SNAPSHOT "ON", restera-t-il en charge? Niveau d'isolement "SERIALIZABLE".

void OuterMethod() { 
    TransactionOptions tso = new TransactionOptions(); 
    tso.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted; 
    using (TransactionScope tx = new TransactionScope(TransactionScopeOption.RequiresNew, tso)) { 
     InnerMethod("select * from testtable"); 
     InnerMethod("update testtable set col1 = N'new value'"); 
     tx.Complete(); 
    } 
} 

static void InnerMethod(string sqlText) { 
    using (SqlConnection conn = SqlConnection(connStr)) { 
     conn.Open(); 
     SqlCommand cmd = conn.CreateCommand(); 
     cmd.ExecuteNonQuery(); 
    } 
} 

Merci

Répondre

2

Serializable est le niveau d'isolation par défaut, mais MS DTC will respect the Isolation Level you specify in your TransactionOptions.

MISE À JOUR

1) Oui, MS DTC sera impliqué.

1a) Non (voir ci-dessus).

1b) La réponse précédente n'est pas oui, mais je crois comprendre que READ_COMMITTED_SNAPSHOT n'est effectif que si le niveau d'isolement est lu. D'autres niveaux d'isolation appliquent leur propre modèle de verrouillage. "When the READ_COMMITTED_SNAPSHOT option is set to ON, read operations under the read committed isolation level are based on row versions and are executed in a nonlocking mode."

+0

toute autre réponse en détail – Buzz

Questions connexes