【问题标题】:SQL Server 2005 trigger to update remote serverSQL Server 2005 触发器更新远程服务器
【发布时间】:2012-05-09 11:49:08
【问题描述】:

我创建了一个更新远程 SQL Server 2005 数据库表的触发器。如果它是手动查询,则代码可以工作,但不能在触发器中工作,因为它试图将其放入事务中并且由于 MSDTC 而失败。

我们的内部服务器对远程服务器有适当的访问权限,但是远程服务器没有对内部服务器的访问权限,这会导致触发器失败吗?

我得到的错误是:

返回链接服务器“LinkServer”的 OLE DB 提供程序“SQLNCLI10” 消息“合作伙伴事务管理器已禁用对 远程/网络事务。”。消息 7391,第 16 级,状态 2,第 1 行 无法执行该操作,因为 OLE DB 提供程序 链接服务器“LinkServer”的“SQLNCLI10”无法启动 分布式事务。

我已经查看了这个并按照建议设置了所有内容,但没有任何乐趣?

【问题讨论】:

    标签: sql-server-2005 triggers msdtc


    【解决方案1】:

    如果远程服务器因任何原因不可用怎么办?

    您通常应该避免在数据库之外的触发器中执行任何操作,更不用说服务器了。问题是触发器中发生的一切都必须是原始事务的一部分,如果触发器中出现任何问题,该事务将被回滚。

    如果在访问远程资源时出现间歇性问题(可能是同一服务器/实例上的不同数据库,或者真正远程的东西),您通常不希望发生这种情况。

    您是否考虑过将此活动与例如Service Broker 解耦?

    【讨论】:

    • 好的,这是有道理的,我同意触发器不是最好的方法,我有一个我们输入日期的日期表,我需要它来更新我们的网站数据库服务器,所以服务代理也是最好的方式?
    • @LukeWilkinson - 这是我通常推荐的 - 除非源数据库和目标数据库中的表在结构和数据方面相同 - 在这种情况下,我会查看 Replication .
    • 谢谢,我的截止日期很紧,所以这次我做的是一个触发器,它启动了一个调用存储过程的工作并且有效,可能不推荐,但按要求提供。
    猜你喜欢
    • 2014-10-09
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 2010-09-14
    • 2011-06-03
    • 1970-01-01
    相关资源
    最近更新 更多