我有一个 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 没有任何内置方法来执行此操作,并且代理服务听起来比您需要的工作量更多。
关于sql - SSIS 批量插入到单个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3893574/