1

我有两台服务器,第一台使用SQL Server 2005,第二台使用SQL Server 2000.我想将数据从2005插入到2000,我希望做到不同步(没有分布式事务,因为使用“保存事务”)。在SQL Server 2000上插入数据的SQL Server Service Broker

将信息插入到2000服务器的表中之后,会触发一些替代触发器来处理此信息。

在这种情况下,我决定使用Service Broker。所以我有一个存储过程将信息从一台服务器插入到另一台服务器,并且完美地工作。

但是,当我从目标队列过程消息过程调用此过程失败,我不知道为什么!我知道它的工作原理是因为当我使用相同的结构(队列&存储过程)在一台SQL 2005服务器上将一个数据库复制到另一个数据库时。

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

回答

1

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

+0

@Remus:我不使用显式事务(分发或不分发),甚至不使用WAITFOR(接收)。我只是使用插入到链接的服务器,但也许有一个隐式的分布式事务。我会尝试!! – Alex 2009-11-30 19:59:31

+0

插入到链接服务器是一个分布式事务。由于WAITFOR在内部创建保存点,因此与分布式事务处理器不兼容,因此插入到链接的服务器上。 – 2009-11-30 20:08:00

0

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

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

是的,当然,用于将信息从一台服务器插入到另一台服务器的存储过程已使用链接服务器插入。 – Alex 2009-11-30 15:54:06

+0

@Alex:链接服务器上的安全性如何配置?如果它是“使用登录的当前安全上下文”,请尝试用固定上下文替换它 – Andomar 2009-11-30 15:58:58