msdtc и уровень изоляции

Мне нужно некоторое разъяснение того, как MS-DTC будет вести себя в сценарии, приведенном ниже.

1) У меня есть более одного соединения в области транзакций (уровень изоляции - ReadCommited), что теперь приведет в действие MS-DTC:

a) Будет ли MS-DTC автоматически изменять уровень изоляции на SERIALIZABLE.

b) (Imp) Если приведенный выше ответ да, и я реализовал уровень изоляции на основе управления версиями строк, то есть в дополнение к TransactionScope, я также включил параметр базы данных READ_COMMITTED_SNAPSHOT «ON», останется ли он в силе, означает, будет ли он поддерживать изоляцию «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();
    }
}

Спасибо


person Buzz    schedule 27.11.2009    source источник


Ответы (1)


Serializable — это уровень изоляции по умолчанию, но MS DTC будет соблюдать уровень изоляции. вы указываете в TransactionOptions.

ОБНОВЛЕНИЕ

1) Да, MS DTC будет задействован.

1а) Нет (см. выше).

1b) Предыдущий ответ не да, но я понимаю, что READ_COMMITTED_SNAPSHOT действует только в том случае, если уровень изоляции зафиксирован для чтения. Другие уровни изоляции будут применять свою собственную модель блокировки. "Если для параметра READ_COMMITTED_SNAPSHOT установлено значение ON, операции чтения под уровнем изоляции read commited основаны на версиях строк и выполняются в неблокирующем режиме."

person Randy supports Monica    schedule 27.11.2009