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)

posted @ 2017-09-19 13:02  王思聪6  阅读(406)  评论(0编辑  收藏  举报
友情链接:回力球鞋 | 中老年高档女装