交易经理

时间:2011-08-02 17:36:52

标签: c# oracle ado.net transactions msdtc

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

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

感谢。

1 个答案:

答案 0 :(得分:2)

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

MSDTC(或第三方备选方案)通常仅在事务跨越多个物理盒(这需要分布式TC-DTC)时或者如果它们跨越多个资源时被调用,其中一个资源只能理解MSDTC。

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

Vista / Server2008引入了内核事务监视器(KTM),它提供了一个非常快速的机上TC。如果可用,System.Transactions将使用KTM,但如果没有(例如,在XP / Server2003上运行时),将调用MSDTC。

例如,KTM允许用户更新数据库,某些(NTFS)文件和MSMQ队列,这些文件都位于同一个物理盒上,而不需要(更昂贵的)分布式事务。

唉,一些较旧的软件不知道KTM,并且在参与超出其本地范围的交易时可能会调用MSDTC。