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. Java IO 操作(一)

    (1)File 类的基础用法 // 1.创建 一个file 对象File file = new File("D:\\aaa");// 2.判断此 file 是否是一个文件夹file ...

  2. 从零点壹开始学JAVA(DAY 1 笔记)<补充记录>

    一个同事的先生(下面称呼其为耿大神)是做开发的,比较资深的那种,在他们公司的核心技术部门. 幸运的是,耿大神很乐意帮助我这株小白菜,在业余时间指导我,这里深表感谢. 耿大神隔段时间会给我提一些问题,让 ...

  3. mysql存不了中文的解决办法

    driver=com.mysql.jdbc.Driverurl=jdbc:mysql://127.0.0.1:3306/testdb?useUnicode=true&characterEnco ...

  4. BeautifulSoup

    参考:http://www.freebuf.com/news/special/96763.html 相关资料:http://www.jb51.net/article/65287.htm 1.Pytho ...

  5. [BZOJ1106][POI2007] Tet 立方体大作战

    Description 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介绍他的简单规则:给定玩家一个有2n个元素的栈,元素一个叠一个地放置.这些元素拥有n个 ...

  6. [BZOJ4196][NOI2015]软件包管理器

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1040  Solved: 603[Submit][Stat ...

  7. asp.net两种方式的短信接口使用(提供接口的都是收费的)

    一种是http请求的方式,另一种就是提供WebService接口供调用的. //服务商 sms.webchinese.cn //sms_url="http://sms.webchinese. ...

  8. winfrom自定义滚动条

    panel或图片什么的跟着鼠标走,这里panel自己可以加背景图或直接搞个图就行了.为了演示清楚,有个滚动条控件做对比,与自定义的同步. using System; using System.Coll ...

  9. slf4j的简单介绍

    SLF4J,Simple Logging Facade for JAVA,是一个十分简单的的日志facade,对于不同的日志框架做了一个封装. 对比common logging,Common logg ...

  10. hibernate不同版本获取获取sessionFactory

    hibernate4时,我们采用以下方式获取会话工厂: // 1. 解析我们在hibernate.cfg.xml中的配置 Configuration configuration = new Confi ...