2010-10-08 70 views
4

我有一个SSIS包,其中包含一个任务,用于加载进程外应用程序以将数据批量插入到一个表中。问题是多个进程外应用程序会在多个文件同时到达时运行。这将导致插入失败。同时将SSIS批量插入到一个表中

SQL Server Broker Service可以排队插入数据吗? SQL Server或SSIS是否有任何机制来处理并行可靠插入?

我使用SSIS”执行进程任务来执行大容量插入LINQ到SQL控制台应用程序

感谢。

+0

什么是你看到的“插入失败”。默认情况下,SQL Server将通过使用锁来处理同时插入的进程。 – bobs 2010-10-08 21:07:08

+0

鲍勃斯,谢谢!我得到的错误是“超时过期,操作完成之前超时或服务器没有响应。”我使用SSIS的执行进程任务执行批量插入LINQ to SQL控制台应用程序。 SSIS任务的超时设置为0.它意味着无限期的时间。转储多个文件会导致多个错误。没有一个文件可以插入。当表被进程锁定时,SQL服务器似乎没有排队其余的插入尝试?它实际上一起失败。 – Don 2010-10-09 03:18:24

+0

我想我现在明白了。顺便说一句,如果你用'@'作为堆栈溢出名称的前缀,用户会收到关于评论的通知。 – bobs 2010-10-09 16:46:42

回答

2

听起来好像你正在得到超时问题,因为SSIS包的第一次运行是锁定表并且包的所有其他运行副本正在等待锁被释放。

有几件事你可以做,以确认这一点。首先,在SQL Server Management Studio(SSMS)中,打开一个查询窗口,当情况发生时执行命令EXEC sp_who2。你会在结果中看到BlkBy列。该列包含阻止选定进程的SPID值。您可能会看到您的软件包的一个实例阻止了所有其他软件包。

在SSIS设计器的数据流任务中,编辑目标组件。有一个表锁定复选框。它可能被检查,它告诉进程锁定表,直到数据加载完成。

你有几个选择来解决这个问题。首先,一个SSIS包必须在另一个SSIS包启动之前完成加载数据是非常重要的?如果答案为否,则可以取消选中目标组件中的表锁定选项。这将允许SQL Server管理同时的数据加载。

如果您必须在其他软件包可以运行之前完成一个软件包,那么您可能需要创建一个SSIS任务来检查该表是否可用于加载。如果表正在加载,则停止SSIS包并稍后重新检查。你甚至可以在你的控制台应用中处理这个。

SQL Server没有任何内置的方法来执行此操作,Broker Service听起来像是比您需要的更多的工作。

+0

谢谢!我已经检查过了。你是对的。 – Don 2010-10-10 00:34:47