我有一个SSIS包,其任务是加载进程外应用程序以将数据批量插入到一个表中。问题是当多个文件同时到达时,将运行多个进程外应用程序。这将导致插入失败。
SQL Server Broker Service可以排队插入数据吗? SQL Server或SSIS是否有任何机制来处理并发可靠插入?
我使用SSIS'Execute Process Task来执行批量插入LINQ to SQL控制台应用程序
感谢。
答案 0 :(得分:2)
听起来好像是因为第一次运行SSIS包是锁定表而且包的所有其他正在运行的副本都在等待锁被释放。
您可以采取一些措施来确认这一点。首先,在SQL Server Management Studio(SSMS)中,打开一个查询窗口,当情况发生时,执行命令EXEC sp_who2
。您将在结果中看到BlkBy列。该列包含阻止所选进程的SPID值。您可能会看到您的软件包的一个实例阻止了所有其他软件包。
在SSIS设计器的“数据流”任务中,编辑“目标”组件。有一个表格锁定复选框。可能会检查它,它告诉进程锁定表,直到数据加载完成。
您有几种方法可以解决这个问题。首先,一个SSIS包必须在另一个SSIS包可以启动之前完成加载数据这一点很重要吗?如果答案为“否”,则可以取消选中“目标”组件中的“表锁定”选项。这将允许SQL Server管理同时的数据加载。
如果必须在其他软件包运行之前让一个软件包完成,那么您可能需要创建一个SSIS任务来检查该表是否可用于加载。如果正在加载表,则停止SSIS包并稍后重新检查。您甚至可以在控制台应用中处理此问题。
SQL Server没有任何内置方法可以执行此操作,而Broker Service听起来比您需要的工作更多。