Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
并行ssis执行_Ssis_Ssis 2012 - Fatal编程技术网

并行ssis执行

并行ssis执行,ssis,ssis-2012,Ssis,Ssis 2012,我有大约112个包裹。实际上,这些包是使用包主程序顺序执行的 我需要并行执行这些包。我创建包主控并手动添加所有这些包,但这不便于支持和维护。是否有一种方法或想法可以从表参数中提取所有包的名称,例如,然后自动并行执行它们,而不是手动添加包?您可以在foreach循环(在SSIS中)中运行execute SQL,也可以在SSMS中的游标中运行 这是一个假设,假设您部署到SSIDB BEGIN DECLARE @execution_id BIGINT EXEC [SSISDB].[ca

我有大约112个包裹。实际上,这些包是使用包主程序顺序执行的


我需要并行执行这些包。我创建包主控并手动添加所有这些包,但这不便于支持和维护。是否有一种方法或想法可以从表参数中提取所有包的名称,例如,然后自动并行执行它们,而不是手动添加包?

您可以在foreach循环(在SSIS中)中运行execute SQL,也可以在SSMS中的游标中运行

这是一个假设,假设您部署到SSIDB

BEGIN
    DECLARE @execution_id BIGINT
    EXEC [SSISDB].[catalog].[create_execution] 
        @package_name=N'[Package Name].dtsx'
        , @project_name=N'[ProjectName]'
        , @folder_name=N'[FolderName]'
        , @use32bitruntime=False
        , @reference_id=NULL
        , @execution_id=@execution_id OUTPUT

    -- Execute the package
    EXEC [SSISDB].[catalog].[start_execution] @execution_id
END
如果需要,还可以添加参数

这是一篇关于不同应用程序的好文章:


注意:默认为异步运行

SSIS不支持这种开箱即用的场景。有一些方法可以做到这一点,但有一些局限性

异步脱离主进程执行 @KeithL的回答中描述的方法非常简单,但有一些缺点:

  • 每个子包都在自己的执行中启动。您可能会启动所有112个遇到资源短缺的包。在这种情况下,SSIS引擎不协调总体资源
  • 包在自己的执行中启动。它不继承父包参数或连接管理器。您必须通过调用SQL代码或环境变量映射重新设置它
  • 从支持的角度来看,SSIS日志中有113个独立执行。不容易连接,尤其是在高负载系统上
进程内执行 备选方案-使用SSIS任务包运行处理此并行调用场景。根据SSIS设计方法,您必须描述主包中运行的所有包。手工构建主包并不实用,因此可以使用。BIML可以基于一些元数据构建主包;它确实很强大,但需要学习和实践

有限并行执行 使用控制变量
i
和循环存在条件
i==0在SSIS中创建For循环块。在块中,设置
i=select count(*)from with(updlock,readpass)
with SQL任务,如果
i==0,则处理到伪表达式任务;这是一个循环中断路径。否则,使用路径条件
i>0
从包队列中读取一行,从队列中删除if,并使用包运行任务启动所选包执行


相当复杂,但这还不是故事的结尾。在SSIS主包中制作复制循环块的多个副本。因此,您将获得一个有限并发的并发执行框架。

您可以使用SQL启动您的包,但您仍在维护一些东西(在本例中是一个表)。@KeithL您能解释一下吗?我需要并行执行包。我已经使用foreach循环按顺序执行包。如果在foreach循环中执行,它将异步(并行)运行并启动所有包。