2011-08-02 127 views
0

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

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

谢谢。

回答

2

拇指的基本规则是,一个事务处理资源(如数据库,队列,消息引擎,文件系统等)将选择最廉价的,最轻的事务处理协调器(TC),其知道的。

当事务跨越多个物理盒(这需要一个分布式TC-DTC)时,或者如果它们跨越多个资源,其中一个只理解MSDTC,通常只会调用MSDTC(或第三方替代方法)。

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

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

KTM允许一个,例如,更新DB,一些(NTFS)的文件和一个MSMQ队列,所有驻留在同一物理设备,而不需要(更加昂贵)分布式事务。

可惜的是,一些较老的软件不知道KTM的和超出其本地范围内的事务时争取可以调用MSDTC。

+0

好的。谢谢你的信息。我曾在某处读过TransactionScope类本身决定在给定场景中使用哪一个......最轻的事务协调器或MSDTC ...是否正确? – user74042

+0

是的 - 一般来说,系统会一直尝试使用给定上下文中最轻的TM。如果事务处理范围之外的事务处理资源包含在事务中,事务将自动提升到必要的TM范围(例如InProc(在同一进程内) - > KTM(在同一台机器上) - > DTC(跨计算机) 。 –