【问题标题】:How does SSIS manage closing connections? Can I force it?SSIS 如何管理关闭连接?我可以强迫吗?
【发布时间】:2012-12-05 22:32:28
【问题描述】:

tl;dr 版本

在运行几个晚上后,我在使用 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 源,则会收到帖子中提到的错误。在其他一些情况下,我通过扩展源查询经历并消除了查找。在这个任务中我没有。

【问题讨论】:

  • 我们喜欢这里的细节 ;P 只是为了了解基础知识:您的系统在补丁方面做得如何?您是否从脚本任务/组件手动创建 OLE DB 连接?假设包没有失败,它通常运行多长时间?您是否使用 MSDTC 处理事务?它是否始终在特定软件包上失败?如何在特定任务上持续失败?
  • 感谢您的提问。好的,我会验证补丁,但我相信它们是最新的。我在底部窗格中手动创建 OLE DB 连接管理器,然后在数据流任务中创建 OLE DB 数据源组件实例并将它们指向连接管理器。目前唯一失败的软件包运行了约 30 分钟。我没有使用 MSDTC,实际上也没有做任何交易;目前我们恢复失败。它在特定的数据流任务上始终失败,从行数(约 300 万行)的角度来看,这是最大的
  • 值得注意的是,这个包运行了 30 分钟,访问了两台服务器上的两个不同的数据库,运行了 7 个不同的数据“实体”,顶层对象,它只传输了 300-500 行,然后图中最底部的对象是前面提到的约 300 万行表。
  • 能否弹出出现故障的数据流任务的屏幕截图?
  • 当然,谢谢@billinkc

标签: sql-server ado.net ssis oledb connection-timeout


【解决方案1】:

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

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

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

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

感谢你们一直陪伴我并仔细考虑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-06
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多