zoukankan      html  css  js  c++  java
  • SSISDB2:使用TSQL执行Package

    在SSISDB中,能够使用TSQL脚本执行Package;每执行一次Package,SSIS都会创建一个Operation 和一个执行实例(Execution Instance),每个Execution Instance都有唯一的标识 ExecutionID,数据类型是bigint;

    有些Package在执行时,需要指定参数值,通过向执行实例传递Parameter,能够为Package的参数赋值,Package的参数分为两种类型:系统参数和Package参数,系统参数共有7个,用于控制日志记录和异步/同步执行方式等行为,而Package参数,用于向Package传递动态的参数值。

    一,在SSISDB中,使用TSQL脚本和Package进行交互

    1,在执行Package时,创建Package的执行实例

    复制代码
    declare @Execution_ID bigint
    exec catalog.create_execution @package_name=N'Test.dtsx',
        @Execution_ID=@Execution_ID output,
        @folder_name=N'MyProjectFloder',
        @project_name=N'MyProject',
        @use32bitruntime=FALSE,
        @reference_id=null
    复制代码

    该SP创建Package的执行实例,以输出(output)参数返回执行实例的ID

    2,向 Package的执行实例传递参数

    复制代码
    --set package parameter
    declare @var0 sql_variant=N'Package_Parameter_value';
    exec catalog.set_execution_parameter_value 
        @Execution_ID=@Execution_ID,
        @object_type=30,        --Package parameter
        @parameter_name=N'Package_Parameter_Name',
        @parameter_value=@var0
    
    --set system parameter
    declare @var1 smallint = 1
    exec [SSISDB].[catalog].[set_execution_parameter_value] 
        @execution_id=@execution_id,  
        @object_type=50,        --system parameter
        @parameter_name=N'LOGGING_LEVEL', 
        @parameter_value=@var1
    exec [SSISDB].[catalog].[start_execution] @execution_id
    复制代码

    3,异步方式执行Package

    exec catalog.start_execution @Execution_ID=@Execution_ID
    go

    由于没有设置系统参数:SYNCHRONIZED,因此,该SP在执行后,不等Package执行完成,就立即返回。

    二,分析代码

    1,使用 catalog.create_execution 存储过程创建一个Execution Instance,创建成功之后,通过参数返回一个唯一的Execution_ID。

    复制代码
    create_execution [ @folder_name ] = folder_name
         , [ @project_name = ] project_name
         , [ @package_name = ] package_name
      [  , [ @reference_id = ] reference_id ]
      [  , [ @use32bitruntime = ] use32bitruntime ]
         , [ @execution_id = ] execution_id OUTPUT
    复制代码

    An execution is used to specify the parameter values that are a package uses during a single instance of package execution.

    2,使用 catalog.set_execution_parameter_value 存储过程来修改Parameter的 Execution Value

    set_execution_parameter_value [ @execution_id = execution_id
        , [ @object_type = ] object_type
        , [ @parameter_name = ] parameter_name
        , [ @parameter_value = ] parameter_value
    [ @object_type = ] object_type
    Use the value 20 to indicate a project parameter or the value 30 to indicate a package parameter.

    For the following parameters, set object_type to 50

    • LOGGING_LEVEL
    • CUSTOMIZED_LOGGING_LEVEL
    • DUMP_ON_ERROR
    • DUMP_ON_EVENT
    • DUMP_EVENT_CODE
    • CALLER_INFO
    • SYNCHRONIZED

    3,异步执行Package

    SSIS Engine 默认以异步方式执行Package,调用sp:catalog.start_execution 执行package的Execution Instance,但是,sp不等待package执行完成,就返回,返回的状态表示调用Package的结果。如果后续执行的Package必须在前一个pacakge执行完成之后才能开始运行,那么,必须以同步方式执行Package,在调用sp:catalog.start_execution 之后不会理解返回,而是等package执行完成之后,才会返回,将控制权传递到下一条TSQL 语句。

    参数 SYNCHRONIZED 控制Package是以同步,还是以异步方式执行,默认值是0,通过将参数:SYNCHRONIZED 的Execution Value 修改为1,使SSIS Engine以同步方式执行Package:

    exec catalog.set_execution_parameter_value 
                    @execution_id=@package_execution_instance_id, 
                    @object_type= 50, 
                    @parameter_name = N'Synchronized', 
                    @parameter_value = 1;

    Synchronized 是一个特殊的Parameter,参数@object_type必须设置为50,当设置参数Synchronized的Execution Value为1,sp:catalog.start_execution 等到Package执行完成之后返回。

    Appendix:

    引用《Quick Tip – Run SSIS 2012 packages synchronously and other execution parameters》:

    In order to call the package synchronously, and therefore keep the caller waiting until the package finishes, you have to set a parameter value to true.  This parameter, SYNCHRONIZED. To call it, simply call catalog.set_execution_parameter_values before calling catalog.start_execution and set the SYNCHRONIZED parameter to true (1).  Like so:

    EXEC [SSISDB].[catalog].[set_execution_parameter_value] 
            @execution_id,  -- execution_id from catalog.create_execution
            @object_type=50, 
            @parameter_name=N'SYNCHRONIZED', 
            @parameter_value= 1; -- turn on synchronized execution

    参考文档:

    Quick Tip – Run SSIS 2012 packages synchronously and other execution parameters

    catalog.create_execution (SSISDB Database)

    catalog.start_execution (SSISDB Database)

    catalog.set_execution_parameter_value (SSISDB Database)

    catalog.executions (SSISDB Database)

  • 相关阅读:
    兼容性问题
    Webfont 的兼容性问题[持续更新]
    WebView的坑[持续更新]
    [转]60fps on the mobile web
    IT男送什么礼物给女朋友呢?
    Lumia 1520 IE mobile window.devicePixelRatio
    Fiddler 故障
    IE(8~11+) 可用右键加速器
    [转]Zen Cart官网屏蔽中国用户访问的真正原因
    Internet Explorer Developer Channel 自动化测试 IE 浏览器
  • 原文地址:https://www.cnblogs.com/wangsicongde/p/7551286.html
Copyright © 2011-2022 走看看