5

tl;博士版

在运行几个晚上后使用 OLE DB (SNC10.0) 连接管理器时出现错误,连接是否无法正确超时?切换到 ADO.NET 连接管理器和源似乎可以解决它,为什么?

我为通用标题道歉,但有太多细节无法在一行中说明。

技术:

在所有情况下,数据库服务器,源和目标都是 SQL Server 2008 R2

设置:

我有一组在半夜一个接一个运行的 SSIS 包。目前有7个。它们都执行一组类似的任务:它们首先连接到源数据库并将数据复制到暂存数据库。然后他们在暂存数据库中进行各种转换。最后,该过程连接到目标数据库并用数据填充它。

我将所有连接设置为 OLE DB 连接 (SQL Native Client 10.0),以便可以将它们与 Lookup 组件和其他特定于 OLE 的组件一起使用。

问题:

我们在自动运行 SSIS 包时反复遇到问题。一般来说,我会从我的站手动测试它,它会运行良好;然后我们将 SSIS 包保存到 SQL Server 并安排它,它会运行良好。几个晚上后,我们会遇到一个问题,例如:

SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。OLE DB 记录可用。来源:“Microsoft OLE DB Provider for SQL Server”Hresult:0x80004005 描述:“TDS 流中的协议错误”。

或者

SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。OLE DB 记录可用。来源:“Microsoft SQL Server Native Client 10.0”Hresult:0x80004005 描述:“从 SQL Server 收到未知令牌”。

在线搜索时,这两个都指向连接问题,特别是网络连接问题。

解决方法:

我发现解决这些问题的一个快速(即使并非总是简单)的解决方案是用 ADO NET 源而不是 OLE DB 源替换源节点。在某些情况下,这在我的数据流任务中是可以接受的,但在我需要使用查找组件或仅适用于 OLE 源的其他此类工具的情况下,如果我仍然会遇到,这不是一个足够好的解决方案这些问题。

问题:

我知道 ADO.NET 和 OLE DB 连接之间存在大量差异,但我注意到的一件主要事情是 OLE DB 连接管理器有两个超时,都默认为“0”的值,这通常意味着禁用(无超时) . ADO.NET 连接管理器有一个超时,它设置为“15”(15 秒)的值。

这两个连接管理器如何处理超时和关闭连接?如果 OLE DB 连接管理器超时值为 0,除非在 SQL Server 上执行某些操作,否则该连接是否永远不会关闭?这可能是我的问题的一部分,有这么多数据流任务打开 OLE DB 连接然后没有被关闭?我可以在 SSIS 包中做些什么来强制关闭这些连接吗?

****编辑****

这是相关数据流任务的屏幕截图。我更改了一些名称以保护无辜者等。

在此处输入图像描述

此处所示的任务将完全正常运行,并且 100% 的时间都可以正常工作。如果我将该 ADO.NET 源更改为 OLE DB 源,则会收到帖子中提到的错误。在其他一些情况下,我通过扩展源查询经历并消除了查找。在这个任务中我没有。

4

1 回答 1

2

我们找出了所有问题的根源,以及问题描述与环境描述不匹配的原因,并且没有足够的线索来解决。

最后一切都崩溃了,我们发现“网络或服务器上没有任何变化”并非如此。

在我们的工作中发生了备份。该备份使用卷影副本,并且正在备份生产数据库和 tempdb。由于磁盘 IO 问题/锁定,由于未写入的更改,tempdb 已增长到半 TB,然后进一步尝试进行卷影复制。

关闭 tempdb 和生产数据库上的备份/卷影副本会导致作业立即完成。耗时 > 30 分钟的查询现在小于 1 分钟。

谢谢你们一直陪着我思考。

于 2012-12-19T16:49:55.960 回答