在 DTC 事务中登记 SSIS 包间歇性失败
我们的软件包随机失败并显示以下错误消息:
SSIS 错误代码
DTS_E_OLEDBERROR
。 发生 OLE DB 错误。 错误代码:0x8004D00A。 COM 错误对象信息可用。 来源:“[某些包名称]”错误代码: 0x8004D00A 描述:“SSIS 运行时未能登记 OLE DB 连接 在分布式事务中,错误为 0x8004D00A“无法加入事务。”
这种情况并不总是发生,重新运行包通常会成功,所以我不认为这是 DTC 或网络配置问题。 无论我们是从 Studio 中还是通过 SQL 代理作业运行包,都会发生这种情况。 在后一种情况下,包在它尝试连接的同一 SQL Server 实例上运行。
我们可以从日志中看到事务正在正确的点启动 - 但几秒钟后,我们得到了失败。
在此非常感谢您收到任何建议!
SQL Server 详细信息:64 位企业版 (v9.0.3233) 在 Server 2003 64 位企业版 (3790) 上运行。 这些服务器运行 E5345 Xeon,具有 6GB RAM。
Our packages are randomly failing with the following error message:
SSIS Error Code
DTS_E_OLEDBERROR
. An OLE DB error has occurred. Error code: 0x8004D00A.
COM error object information is available. Source: "[Some Package Name]" error code:
0x8004D00A Description: "The SSIS Runtime has failed to enlist the OLE DB connection
in a distributed transaction with error 0x8004D00A "Unable to enlist in the transaction."
This doesn't happen all the time, and re-running the package often succeeds, so I don't think it's a DTC or network config problem. This happens whether or not we're running the package from within Studio or by a SQL Agent Job. In the latter case, the package is running on the same SQL Server instance that it is trying to connect to.
We can see from the logs that the transaction is being started at the correct point - but a couple of seconds later, we get the failure.
Any suggestions gratefully received at this point!
SQL Server Details: 64-bit Enterprise Edition (v9.0.3233) running on Server 2003 64-bit Enterprise (3790). The servers are running E5345 Xeons, with 6GB of RAM.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我们最终找到了答案 - 控制流中有两个独立的任务正在建立与同一数据库的连接。 显然,某处存在某种竞争条件导致其失败。 添加优先级约束以强制任务串行执行可以解决问题。
We found the answer in the end - there were two independent tasks in the control flow that were establishing connections to the same database. Evidently there is some race condition somewhere that makes it fail. Adding a precedence constraint to force the tasks to be executed in series made the problem go away.