0

我有一个针对两个数据库执行分布式查询的 Business Objects Web Intelligence 报表。

当我运行包含 BEGIN DISTRIBUTED TRANSACTION QUERY 的查询时

SET xact_abort ON
GO
USE Pipeline2
GO
BEGIN DISTRIBUTED TRANSACTION
SELECT * FROM [CQSR_PROD].CqUSer.Cq4User1.Defect
COMMIT TRAN
GO

我收到此错误:

服务器:消息 7391,级别 16,状态 1,行 2 由于 OLE DB 提供程序“SQLOLEDB”无法开始分布式事务,因此无法执行操作。[OLE/DB 提供程序返回消息:新事务无法加入指定的事务协调器。] OLE DB 错误跟踪 [OLE/DB 提供程序 'SQLOLEDB' ITransactionJoin::JoinTransaction 返回 0x8004d00a]。

我想解决这个错误。我看过这篇知识库文章...

http://support.microsoft.com/kb/839279

到目前为止,系统管理员已启用“允许入站”复选框,但这并没有帮助。我相信所有涉及的服务器都是 Windows 2003 服务器。

对生产服务器进行更改以尝试知识库文章中解释的其余选项比拔牙更糟糕,因为他们对更改非常谨慎。因此,我正在寻找解决方法:

有没有办法告诉 BO在查询时不要执行分布式事务?如果我从上述 SQL 中删除“BEGIN DISTRIBUTED TRANSACTION”,一切正常。看来 BO 默认会这样做。

4

1 回答 1

0

我尝试了两种途径。

1) 尝试让 BO 不要发起 DIST Transaction 2) 尝试解决 BO 在我们的服务器上执行 DIST TRANS 时返回的错误。

我成功地找到了#2 的解决方案:

http://www.howtogeek.com/howto/windows/fix-new-transaction-cannot-enlist-in-the-specified-transaction-coordinator-on-server-2003-sp2/

于 2009-07-27T17:42:02.810 回答