SSISDB5:使用TSQL脚本执行Package

简介:

通常情况下,ETL工程师创建一个Agent Job来周期性地执行Package,Agent底层调用SSISDB的存储过程(catalog.start_execution)以同步模式来启动执行实例,这就意味着,我们可以模拟Agent Job的行为,使用TSQL脚本执行Package。SSIS引擎每执行一次Package,都会创建一个执行实例(Execution Instance),每个执行实例都有唯一的标识 ExecutionID,数据类型是bigint。

执行实例可以包含参数,使用存储过程(catalog.set_execution_parameter_value)向执行实例传递参数。执行实例的参数分为两种类型:系统参数和Package参数,系统参数共有7个,用于控制日志记录、执行方式(异步/同步)等行为,而Package参数,用于向Package传递动态的参数值。为了控制执行实例的行为,需要向执行实例传递系统参数;有些Package包含参数,在开始执行实例之前,必须赋值。

一,创建执行实例

执行Package的第一步是创建Package的执行实例,并保存执行实例的ID。使用 catalog.create_execution 存储过程创建一个执行实例,创建成功之后,通过输出参数返回唯一的实例ID(Execution_ID)。

复制代码
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。

二,传递参数

向执行实例传递参数是可选的步骤,参数分为Package参数和系统参数,系统参数控制Packag的行为,如果参数@object_type的值为50,表示为执行实例设置系统参数。

复制代码
--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
复制代码

使用存储过程 catalog.set_execution_parameter_value 来修改参数的执行值(Execution Value):

catalog.set_execution_parameter_value 
      [ @execution_id = execution_id
    , [ @object_type = ] object_type
    , [ @parameter_name = ] parameter_name
    , [ @parameter_value = ] parameter_value

参数 @object_type的值是20、30 和50,分别表示工程级别的参数(Project Parameter),包级别的参数(Package Parameter),以及系统参数;

参数 @parameter_name 是参数的名称,对于系统参数,共有以下7个:

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

参数@parameter_value是参数的值,例如,设置@object_type=50,@parameter_name=‘SYNCHRONIZED’,@parameter_value为1,表示以同步方式启动执行实例。

三,开始执行实例

为执行实例传递相应的参数之后,可以调用SP运行Package的执行实例。在实例的脚本中,由于没有启用同步模式(设置系统参数:SYNCHRONIZED为1),因此,该SP以异步方式执行Package,不等Package执行完成,该SP就立即返回。

exec catalog.start_execution @Execution_ID=@Execution_ID
go

四,执行实例的运行模式

SSIS 引擎默认以异步方式执行Package,这意味着,在调用SP:catalog.start_execution 开始执行实例之后,SP不等待package执行完成,立即返回,返回的结果值表示调用Package的结果。如果后续执行的Package必须在前一个Package执行完成之后才能开始运行,那么,必须以同步方式执行Package,所谓同步模式,就是说,在调用sp:catalog.start_execution 之后,SP不会立即返回,而是等package执行完成之后,SP才会返回,将控制权传递到下一条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是一个系统参数,参数@object_type必须设置为50,当设置参数SYNCHRONIZED的执行值(Execution Value)为1,存储过程:catalog.start_execution 等到Package执行完成之后返回。

 

参考文档:

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)

作者悦光阴
本文版权归作者和博客园所有,欢迎转载,但未经作者同意,必须保留此段声明,且在文章页面醒目位置显示原文连接,否则保留追究法律责任的权利。
分类: SSISDB
标签: SSISDB

本文转自悦光阴博客园博客,原文链接:http://www.cnblogs.com/ljhdo/p/4954186.html,如需转载请自行联系原作者
目录
相关文章
|
8月前
|
SQL
利用Ant 执行SQL 脚本
利用 Ant 的SQL Task来实现执行SQL 脚本的功能
132 0
|
5月前
|
Java 关系型数据库
Java调用db2cmd命令导出数据
Java调用db2cmd命令导出数据
|
9月前
|
SQL 分布式计算 Hadoop
Spark SQL CLI配置
Spark SQL CLI配置
Spark SQL CLI配置
|
SQL Java 关系型数据库
JavaJDBC异常记录:关于sql上能够正常执行的sql语句,在java中执行了但是返回结果不一致问题
今天在写关于JDBC程序时出现了一个异常就是sql语句在mysql中可以正常执行,在java中也能正常执行,但是二者返回结果却不一致。
JavaJDBC异常记录:关于sql上能够正常执行的sql语句,在java中执行了但是返回结果不一致问题
|
SQL Java
Java 使用 ant.jar 执行 SQL 脚本文件
Java 使用 ant.jar 执行 SQL 脚本文件
169 0
Java 使用 ant.jar 执行 SQL 脚本文件
|
SQL 分布式计算 大数据
导出SQL运行结果的方法总结
本文通过几个例子,介绍了几种下载MaxCompute SQL计算结果的方法。为了减少篇幅,所有的SDK部分都只举例介绍Java的例子。 SQLTask SQLTask是SDK直接调用MaxCompute SQL的接口,能很方便得运行SQL并获得其返回结果。 从文档可以看到,SQLTask.ge
12048 1