如果我使用.Net System.Transactions.TransactionScope类来处理Oracle数据库中多个表的事务,哪一个将使用LTM [轻量级事务管理器]或MSDTC [Microsoft分布式事务协调器]?
是否有任何规则或策略可以决定使用哪一个以及何时使用? 请指教。 另外,想知道何时使用两阶段提交?它是否仅用于跨多个数据库的分布式事务?
感谢。
答案 0 :(得分:2)
基本的经验法则是,事务处理资源(例如数据库,队列,消息传递引擎,文件系统等)将选择其所知的最便宜和最轻的事务协调器(TC)。
MSDTC(或第三方备选方案)通常仅在事务跨越多个物理盒(这需要分布式TC-DTC)时或者如果它们跨越多个资源时被调用,其中一个资源只能理解MSDTC。
对于完全在特定服务器应用程序内的交易,很可能他们将使用自己的内部TC或使用他们正在运行的平台上最便宜的TC。
Vista / Server2008引入了内核事务监视器(KTM),它提供了一个非常快速的机上TC。如果可用,System.Transactions将使用KTM,但如果没有(例如,在XP / Server2003上运行时),将调用MSDTC。 例如,KTM允许用户更新数据库,某些(NTFS)文件和MSMQ队列,这些文件都位于同一个物理盒上,而不需要(更昂贵的)分布式事务。唉,一些较旧的软件不知道KTM,并且在参与超出其本地范围的交易时可能会调用MSDTC。