【问题标题】:msdtc and isolation levelmsdtc 和隔离级别
【发布时间】:2010-12-20 21:00:33
【问题描述】:

我需要澄清一下 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();
    }
}

谢谢

【问题讨论】:

    标签: sql-server transactions isolation-level read-committed-snapshot


    【解决方案1】:

    Serializable 是默认隔离级别,但MS DTC will respect the Isolation Level you specify in your TransactionOptions

    更新

    1) 是的,将涉及 MS DTC。

    1a) 否(见上文)。

    1b) 前面的答案不是肯定的,但据我了解,READ_COMMITTED_SNAPSHOT 仅在隔离级别被读取提交时才有效。其他隔离级别将强制执行它们自己的锁定模型。 "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."

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 2013-01-25
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多