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