SSISDB 系列随笔汇总:

通常情况下,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)

SSISDB2:使用TSQL执行Package的更多相关文章

  1. SSISDB5:使用TSQL脚本执行Package

    SSISDB 系列随笔汇总: SSISDB1:使用SSISDB管理Package SSISDB2:SSIS工程的操作实例 SSISDB3:Package的执行实例 SSISDB4:当前正在运行的Pac ...

  2. vscode在执行 npm任务的时候,会先执行package的name@version 然后命令名 加 当前路径,问题是我的引入路径e是小写的,会导致调试错误,解决方案:没找到,先手书吧

    vscode在执行 npm任务的时候,会先执行package的name@version 然后命令名 加 当前路径,问题是我的引入路径e是小写的,会导致调试错误,解决方案:没找到 Executing t ...

  3. gocommand:一个跨平台的golang命令行执行package

    最近在做一个项目的时候,需要使用golang来调用操作系统中的命令行,来执行shell命令或者直接调用第三方程序,这其中自然就用到了golang自带的exec.Command. 但是如果直接使用原生e ...

  4. maven 在执行package,install,deploy时使用clean与不使用clean的区别

    有时候用mvn install后,新改的内容不生效,一定要后来使用mvn clean install 才生效,由于之前没有做记录,以及记不清是什么情况下才会出现的问题,于是想看看clean和不clea ...

  5. maven中执行package, install, deploy的区别

    package命令完成了项目编译.单元测试.打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库 install命令完成了项目编译.单元测试 ...

  6. tsql 执行存储过程

    https://msdn.microsoft.com/zh-sg/library/ms189915.aspx https://msdn.microsoft.com/en-us/library/ms18 ...

  7. SSISDB3:Package的执行实例

    SSISDB 系列随笔汇总: SSISDB1:使用SSISDB管理Package SSISDB2:SSIS工程的操作实例 SSISDB3:Package的执行实例 SSISDB4:当前正在运行的Pac ...

  8. SSISDB8:查看SSISDB记录Package执行的消息

    在执行Package时,SSISDB都会创建唯一的OperationID 和 ExecutionID,标识对package执行的操作和执行实例(Execution Instance),并记录opera ...

  9. SSISDB7:查看当前正在运行的Package

    在项目组中做ETL开发时,经常会被问到:“现在ETL跑到哪一个Package了?” 为了缩短ETL运行的时间,在ETL的设计上,经常会使用并发执行模式:Task 并发执行,Package并发执行.对于 ...

随机推荐

  1. sprint3

    Sprint 3计划会议: 团队: 郭志豪:http://www.cnblogs.com/gzh13692021053/ 杨子健:http://www.cnblogs.com/yzj666/ 刘森松: ...

  2. 【BO】SAP BO相关问题汇总贴

    本文将以往写过的关于SAP BO相关问题的帖子汇总了一下,方便寻找 #1 为WEBI报表添加自定义字体font #2 WEBI文件打开时提示Illegal access错误 #3 安装BO服务器时,o ...

  3. sql server的优缺点

    sql server的优点众多,让其在数据库领域独占鳌头,成为最受欢迎的数据库系统,其优缺点也自然是喜爱者们所关注的,首先了解一下它的历史: sql server是一个关系型数据库管理系统,最初是由M ...

  4. iOS 中自定义 cell,点击cell的时候文字不出现的原因

    解决方案: 在setSelected方法中设置要显示label的背景颜色即可

  5. angluar去掉url中#

    众所周知,angular项目中路由机制会在地址栏加一个#来实现各个页面的切换,虽然url中有个#号也无伤大雅,但每次看到多一个这个东西总是不舒服(我不是强迫证啊),趁着项目间隙还是决定把它去掉. 去谷 ...

  6. JSP实现在项目在网页上查询

    <table> <caption>user</caption> <tr> <td>编号</td> <td>姓名< ...

  7. 谢欣伦 - 原创软件 - 游戏专题 - 我的桌面My Desktop

    今天在网上看到一个用桌面背景当做拼图内容的游戏很新颖,反正今天下雨我也闲着,索性用了半天时间做了一个类似的游戏<MyDesktop>.做完后立即分享给了两个朋友,他俩都被吓坏了.现在分享给 ...

  8. java身份证验证

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  9. tar 命令

    tar -cf   打包的文件名    打包的文件   ------tar  -cf   db.all   test.txt   (-c  表示建立新的包,-f通常是必选项) tar -tf   打包 ...

  10. libreoffice转换文件为pdf文件乱码问题解决办法

    最近系统需要一个office文件预览功能 解决方案为使用libreoffice将office文件转换为pdf文件,然后使用swftools将pdf文件转换为swf文件 最后在前台使用flexpaper ...