跨不同数据库连接的多个SQL事务命令

Jas*_*ris 6 .net sql t-sql msdtc transactions

我正在为我的应用程序使用.NET 2.0/3.5框架.我需要在多个连接上运行多个SQL命令,每个连接都在不同的服务器上(Oracle,SQL Server).我需要确保这些命令是事务性的.

例如:我需要在Oracle和SQL Server数据库的表中执行INSERT,然后在没有抛出异常的情况下提交它们.如果有异常,我想在需要时在两台服务器上回滚.

我怀疑我需要使用System.Transactions和TransactionScope.这将要求我在数据库服务器和应用程序服务器上设置Microsoft分布式事务处理协调器(MSDTC).

我看起来高低,找不到任何文章描述逐步设置MSDTC与相互身份验证(包括配置防火墙设置和MSDTC设置.)我查看了有关设置MSDTC的Microsoft文档,但它似乎完全没有价值,而不是完整记录(除非你能找到一篇关于如何设置它的非常好的MSDN文章.)

使用MSDTC是完成工作的唯一方法吗?

如果是这样,我该怎么配置呢?

编辑:

  • 我正在为所有机器使用Windows Server 2003.
  • 我有两个SQL Server.一个是SQL Server 2000,另一个是2005.
  • 我有一台Oracle服务器,版本是11g
  • 我们开发的应用程序有时必须以事务方式在所有三个数据库中更改/创建记录.
  • 这不是键盘和椅子之间的问题.我们在MSDN上阅读了有关如何设置MSDTC所有内容的文章,但我们无法使DTCPing和其他测试应用程序正常工作.我们正在寻找详细介绍该过程的分步文章.我不止一次遇到MSDN文档,"遗漏"了做某些事情的步骤.

Shu*_*oUk 5

可悲的是,两家供应商的官方文档似乎都很乐意提及互操作提供商或其他供应商,但他们似乎都不愿意承认对方数据库产品的存在.

您可能更喜欢需要有关Microsoft Transaction Server的Oracle Services的文档.

  • Oracle文档:
    • 10克
    • 9I
    • 存在较旧的版本,但在8之后似乎有很多变化

从ODP.NET 10.2.0.3开始,您应该(如果您已经适当地配置了MS DTC并且OraMTS dll存在)能够简单地使用System.Transactions TransactionScope,就像在两个sql server数据库之间协调但是使用它一样一个sql server和oracle连接.可能需要Oracle 10以上才能完全开箱即用.

以下是从.net 2.0和Sql Server 2005开始使用DTC的指南.特别是它注意到操作系统的要求(这应该在很大程度上不再是一个问题,但值得注意).此外,除非两个数据库和客户端都在同一台计算机上,否则必须启用网络DTC.