SSIS如何管理关闭连接?我可以强行吗?

Ric*_*sen 5 sql-server oledb ado.net ssis connection-timeout

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记录可用.来源:"用于SQL Server的Microsoft OLE DB提供程序"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 Sources而不是OLE DB Sources替换源节点.对于某些情况,这在我的数据流任务中是可以接受的,但是在我需要使用Lookup组件的情况下,或者只能使用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源我得到帖子中提到的错误.在其他一些情况下,我通过扩展源查询来完成并消除了Lookup.在这项任务中我没有.

Ric*_*sen 2

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

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

我们工作期间发生了一次备份。该备份使用卷影复制并备份生产数据库和 tempdb。由于磁盘 IO 问题/锁定,临时数据库由于未写入的更改而增长到半太字节,然后进一步尝试进行卷影复制。

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

感谢你们一直支持我并思考这个问题。