【问题标题】:SSIS bulk insert into a single table concurrentlySSIS同时批量插入单个表
【发布时间】:2010-10-08 19:10:01
【问题描述】:

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

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

我使用 SSIS 的执行进程任务来执行批量插入 LINQ to SQL 控制台应用程序

谢谢。

【问题讨论】:

  • 你看到的“插入失败”是什么。默认情况下,SQL Server 将通过使用锁来处理同时插入的进程。
  • 鲍勃,谢谢!我得到的错误是“超时已过期。在操作完成之前超时时间已过或服务器没有响应。”我使用 SSIS 的执行进程任务来执行批量插入 LINQ to SQL 控制台应用程序。 SSIS 任务的超时设置为 0。它应该意味着无限期。转储多个文件将导致多个错误。不能插入单个文件。当表被进程锁定时,SQL Server 似乎没有将其余的插入尝试排队?它实际上都失败了。
  • 我想我现在明白了。顺便说一句,如果您在堆栈溢出名称前加上'@',用户将收到有关评论的通知。
  • @bobs - 谢谢!下次我会这样做
  • 您使用控制台应用程序插入数据的任何原因?如果您只是使用 SSIS 插入数据,您似乎可以解决很多问题并拥有更多控制权

标签: sql sql-server-2008 ssis


【解决方案1】:

听起来您遇到了超时问题,因为 SSIS 包的第一次运行正在锁定表,并且该包的所有其他运行副本都在等待释放锁。

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多