【问题标题】:Transaction manager事务管理器
【发布时间】:2011-08-02 17:36:52
【问题描述】:

如果我使用 .Net System.Transactions.TransactionScope 类进行跨 Oracle 数据库中多个表的事务,将使用 LTM[轻量级事务管理器] 还是 MSDTC[Microsoft 分布式事务协调器]?

在决定使用哪个以及何时使用的场景中是否有任何规则或策略? 请指教。 另外,想知道什么时候使用两阶段提交?它是否仅用于跨多个数据库的分布式事务?

谢谢。

【问题讨论】:

    标签: c# oracle ado.net transactions msdtc


    【解决方案1】:

    基本的经验法则是事务处理的资源(例如数据库、队列、消息传递引擎、文件系统等)将选择它所知道的最便宜和最轻的事务协调器 (TC)。

    MSDTC(或第 3 方替代方案)通常仅在事务跨越多个物理盒子(这需要分布式 TC - DTC)或它们跨越多个资源(其中一个只理解 MSDTC)时才被调用。

    对于完全在特定服务器应用程序内进行的交易,他们可能会使用自己的内部 TC 或使用其运行平台上可用的最便宜的 TC。

    Vista/Server2008 引入了 Kernel Transaction Monitor (KTM),它提供了一个非常快速的 on-box TC。如果可用,System.Transactions 将使用 KTM,但如果不可用(例如,在 XP/Server2003 上运行时),将调用 MSDTC。

    例如,KTM 允许更新一个数据库、一些 (NTFS) 文件和一个 MSMQ 队列,它们都驻留在同一个物理盒子上,而无需(更昂贵的)分布式事务。

    唉,一些较旧的软件不知道 KTM,并且在加入超出其本地范围的事务时可能会调用 MSDTC。

    【讨论】:

    • 好的。谢谢你的信息。我在某处读到 TransactionScope 类本身决定在给定场景中使用哪一个......最轻的事务协调器或 MSDTC......这是正确的吗?
    • 是的 - 通常,系统将始终尝试使用可用于给定上下文的最轻量级 TM。如果当前事务范围之外的事务处理资源在事务中登记,则事务将自动提升到必要的 TM 范围(例如 InProc(在同一进程内)-> KTM(在同一台机器上)-> DTC(跨机器) .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 2010-09-09
    • 2013-03-27
    相关资源
    最近更新 更多