【问题标题】:SQL Server Service Broker to insert data on a SQL Server 2000SQL Server Service Broker 在 SQL Server 2000 上插入数据
【发布时间】:2009-11-30 15:30:32
【问题描述】:

我有两台服务器,第一台使用 SQL Server 2005,第二台使用 SQL Server 2000。我想将数据从 2005 插入到 2000,并且我想不同步(没有分布式事务,因为“保存事务")。

一旦将信息插入 2000 服务器的表中,就会触发一些而不是触发器来处理此信息。

在那种情况下,我决定使用 Service Broker。所以我有一个存储过程来将信息从一台服务器插入到另一台服务器,它工作得很好。

但是当我从目标队列进程消息过程中调用这个过程时它失败了,我不知道为什么!!

另外,我知道它可以工作,因为当我使用相同的结构(队列和存储过程)将一个数据库复制到同一 SQL 2005 服务器上的另一个数据库时。

所以它只在机器之间失败,任何人都知道为什么或如何获得有关失败原因的更多信息?或者如何插入数据不同步(我不能使用 SQL 代理,因为我希望插入信息的频率超过 1 分钟)。

【问题讨论】:

    标签: sql-server sql-server-2005 sql-server-2000 service-broker


    【解决方案1】:

    通常的问题是 SSB 过程使用 WAITFOR,而 WAITFOR 与分布式事务不兼容。唯一的解决方案是去掉 WAITFOR(RECEIVE) 并改用普通的 RECEIVE。

    【讨论】:

    • @Remus:我不使用显式事务(分布式与否),甚至不执行 WAITFOR(RECEIVE)。我只是在链接服务器中使用插入,但它上面可能存在隐式分布式事务。我会试试的!!
    • 插入链接服务器是一个分布式事务。因为 WAITFOR 在内部创建一个保存点,与分布式事务不兼容,因此与链接服务器上的插入不兼容。
    【解决方案2】:

    考虑使用链接服务器而不是服务代理。使用链接服务器,您可以:

    insert into LinkedServer.The2000Db.dbo.The2000Table
    (col1, col2, col3)
    select col1, col2, col3
    from The2005Table
    

    【讨论】:

    • 是的,当然,这个用于将信息从一台服务器插入到另一台服务器的存储过程已经使用链接服务器插入。
    • @Alex:链接服务器上的安全性如何配置?如果是“使用登录当前的安全上下文”,尝试用固定上下文替换它
    猜你喜欢
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2013-09-07
    • 2011-05-04
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    相关资源
    最近更新 更多