【问题标题】:MS DTC required for executing triggers and stored procedures on same server在同一台服务器上执行触发器和存储过程所需的 MS DTC
【发布时间】:2012-04-04 23:21:59
【问题描述】:

在使用同一 SQL Server 2005 中的两个数据库集成两个应用程序时会出现此问题。两个应用程序在同一台服务器上都有自己的数据库,但我们必须将一些数据从一个数据库传输到另一个数据库。我们正在使用触发器和存储过程来做到这一点。

如果我们使用 SQL Server Management Studio 将数据插入数据库,则不需要 msdtc,但如果我们使用应用程序插入数据,我们会收到错误消息,指出 DTC 未启用。我们无法控制应用程序插入数据。

简而言之我的问题是为什么在使用应用程序插入数据时需要msdtc?

注意:触发器不会在数据库之间进行调用,只有存储过程才是

【问题讨论】:

  • 听起来像是 SQL Server 2005 的自动升级问题:stackoverflow.com/questions/1690892/…
  • 这可能是问题所在,我在发帖之前阅读了该帖子。我们正在运行此应用程序的客户端环境中进行部署,并且他们没有启用 msdtc。不启用 msdtc 就没有办法工作吗?
  • 可能。就像我说的:发布一些代码......
  • 虽然我的第一个问题仍然可以作为替代方案,但我尝试从触发器调用存储过程,以将一些数据插入链接服务器中的数据库。两台服务器上的 msdtc 都已启动并允许网络访问。我得到的错误是“链接服务器的 sqlncli 返回消息没有事务处于活动状态”解决此问题需要什么。客户端是windows xp sp2 服务器是windows 2003 server

标签: sql-server sql-server-2005 stored-procedures


【解决方案1】:

在很多情况下可能会间接使用 MSDTC:集群服务器、配置复制、COM+ 的大多数用法等等。

但是,正如@MitchWheat 在评论中已经指出的那样,只要您在单个事务范围内有多个数据库连接,SQL Server 2005(以及 Oracle 资源管理器)就会专门使用 MSDTC。此行为已在 SQL Server 2008 中修复(如果您认为它不便)。

在您的情况下,这是客户端问题,而不是服务器端问题,但通常都可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 2019-03-25
    • 2015-05-20
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多