利用SSIS的ForcedExecutionResult 属性 和CheckPoint调试Package

1,ForcedExecutionResult

强制一个package或task执行的结果,共有四种值 None,Success,Failure,Completion,默认值是None,表示不强制返回值。

如果设置ForcedExecutionResult=Success,不管package执行过程中是否出现异常,package执行的结果都是Success。

The default value of this property is None, which indicates that the container does not force its execution outcome.You can use the ForceExecutionResult property on a task or container to test the use of checkpoints in a package. By setting ForceExecutionResult of the task or container to Failure, you can imitate real-time failure. When you rerun the package, failed task and containers will be rerun.

2,如果一个Package design比较复杂,在调试的时候,会很头疼,每次都从头开始执行package显然比较耗时,可以利用SSIS的CheckPoint功能,从Package的错误点restart;如果某一个Task执行速度十分慢,但每次都能执行成功,当对这个task tune performance时,如何调试更有效率。使用Task的ForcedExecutionResult属性,设置ForcedExecutionResult=Failure,强制Task返回Failure。那么Restart时,就会从该Task开始执行。

示例,利用Task的ForcedExecutionResult属性和CheckPoint进行调试

Step1,创建测试表格和Control Flow design

CREATE TABLE [dbo].[ptest]
(
    [id] [int] IDENTITY(1,1) NOT NULL,
    [code] [int] NOT NULL,
 CONSTRAINT [pk_ptest] PRIMARY KEY NONCLUSTERED
(
    [id] ASC
)
)

Task insert1,Insert2,Insert3的Sql Statement分别是

--Task Insert1
insert into dbo.ptest(code)
values(1)

--Task Insert2
insert into dbo.ptest(code)
values(2)

--Task Insert3
insert into dbo.ptest(code)
values(3)

Step2,开启package的CheckPoint机制,并设置三个Execute Sql Task 的FailPackageOnFailure=true.

Step3,将Task Insert2的ForcedExecutionResult设置为Failure,执行Package,查看执行情况

Task Insert2 已经执行完成“100 percent complete”,查看数据库中的数据,sql语句正确执行,但是由于Task Insert2设置属性ForcedExecutionResult=Failure,即使执行成功,Task也会强制返回Failure。

step4,不做任何修改,重新执行package,查看执行情况

Step5,利用强大的Express属性动态设置组件的属性值

在调试组件的过程中,逐个修改ForcedExecutionResult的值,显得十分繁琐,可以利用组件的Expression来动态设置ForcedExecutionResult的值。

创建一个变量varForcedExecutionResult,DataType是Int32,初始化值为1。

ForcedExecutionResult的各个选项对应的整数值如下

-1=None

0=Success

1=Failure

2=Completion

修改Task Insert2的属性ForcedExecutionResult=None,并配置Expressions,设置[email protected][User::varForcedExecutionResult],Task Insert2的UI上面添加一个fx图标。

Step6,重新执行Package,查看执行情况

CheckPoint文件的内容中含有DTS:Variable section,package在restart时,会加载这些变量的值,如果变量的值在restart之前,在package中被修改,那么restart package时,SSIS只会加载CheckPoint文件中记录的变量值,而忽略Package中变量的初始值。

可以修改CheckPoint中变量的值,使Restart package时加载更新之后的变量值。

<DTS:Checkpoint xmlns:DTS="www.microsoft.com/SqlServer/Dts" DTS:PackageID="{DB02D0B1-82E5-45D8-AA94-5655572C5DF8}">
<DTS:Variables DTS:ContID="{DB02D0B1-82E5-45D8-AA94-5655572C5DF8}">
<DTS:Variable DTS:Namespace="User" DTS:IncludeInDebugDump="2345" DTS:ObjectName="varForcedExecutionResult" DTS:DTSID="{552910BC-B814-4B8B-8014-3E19997AD4ED}" DTS:CreationName="">
<DTS:VariableValue DTS:DataType="3">1</DTS:VariableValue>
</DTS:Variable>
</DTS:Variables>
<DTS:Container DTS:ContID="{BE14E7B0-21EC-4C23-922B-1240C9AC5C83}" DTS:Result="0" DTS:PrecedenceMap=""/>
</DTS:Checkpoint>

Step7,修改变量varForcedExecutionResult的初始值为-1,重新执行package,查看执行情况

原因是单纯的修改Package中的变量值,不修改CheckPoint文件中变量的值,Package只会加载CheckPoint文件中变量的值。

Step8,修改CheckPoint中变量的值,<DTS:VariableValue DTS:DataType="3">-1</DTS:VariableValue>,重新执行package,查看执行情况

<DTS:Checkpoint xmlns:DTS="www.microsoft.com/SqlServer/Dts" DTS:PackageID="{DB02D0B1-82E5-45D8-AA94-5655572C5DF8}">
<DTS:Variables DTS:ContID="{DB02D0B1-82E5-45D8-AA94-5655572C5DF8}">
<DTS:Variable DTS:Namespace="User" DTS:IncludeInDebugDump="2345" DTS:ObjectName="varForcedExecutionResult" DTS:DTSID="{552910BC-B814-4B8B-8014-3E19997AD4ED}" DTS:CreationName="">
<DTS:VariableValue DTS:DataType="3">-1</DTS:VariableValue>
</DTS:Variable>
</DTS:Variables>
<DTS:Container DTS:ContID="{BE14E7B0-21EC-4C23-922B-1240C9AC5C83}" DTS:Result="0" DTS:PrecedenceMap=""/>
</DTS:Checkpoint>

时间: 2024-08-05 23:35:40

利用SSIS的ForcedExecutionResult 属性 和CheckPoint调试Package的相关文章

SSIS错误恢复利器:CheckPoint

?? 大家对使用SSIS做数据接口应该不陌生了吧,没听过的同学得努力补补了.就开发体验和效率来看,SSIS是款非常酷的软件,学会它的基本使用方法还是很有必要的.既然是数据接口就免不了要考虑灾难恢复这样的事情了.还好SSIS为我们提供了OOB的Feature-- CheckPoint,关键时候还是可以抱抱它大腿的. CheckPoint,SSIS的Failover组件.通过配置SSIS Package的CheckPoint,我们可以非常轻松的保证:不重复执行Control Flow,只在最后出错点

利用form的target属性屏蔽url跳转

target: 规定在何处打开 action URL. 关键点: 让target指向隐藏的iframe demo: form.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional

利用GDB在远程开发机进行调试

由于一些环境的制约,很多同学都可能需要在开发机上进行调试,但由于开发机资源的限制,在开发机上直接进行本地的GDB环境配置就成了难题,这个时候其实我们可以利用GDB中自带的gdbserver工具就可以进行远程开发机的调试. gdbserver可以走网络,串口等通信机制,对于网络来说支持ip:prot格式运行.比如你的开发机所在IP是192.168.3.11,你的机器是192.168.3.1,这个时候你首先先下好GDB的源码,然后进入到gdb_src/gdb/gdbserver目录下进行./conf

泛型约束和利用反射修改对象属性的值

周日了都,昨天休息了一天,今天想想得敲敲代码练习一下,如下关于泛型约束和利用反射修改对象属性的值的, 都挺简单的,呵呵,但时间一长,不经常使用还容易忘记在此就当记录一下了, 首先泛型代码一般是如下的情形: 加了泛型约束,只允许引用类型并且是只能是无参数的构造函数的类型才能传入,也就是不允许给类构造参数传递实参,否则将报错. 错误 1 “XXXXXX.pros”必须是具有公共的无参数构造函数的非抽象类型,才能用作泛型类型或方法“ 1 public static T GetObject<T>(T

C#利用反射获取对象属性值

public static string GetObjectPropertyValue<T>(T t, string propertyname){     Type type = typeof(T); PropertyInfo property = type.GetProperty(propertyname); if (property == null) return string.Empty; object o = property.GetValue(t, null); if (o == n

如何利用好chrome控制台这个神器好好调试javascript代码

上面的文章已经大致介绍了一下console对象具体有哪些方面以及基本的应用,下面简单介绍一下如何利用好chrome控制台这个神器好好调试javascript代码(这个才是我们真正能用到实处的地方) 1.先说一下源码定位 大家打开测试网页   看到页面右下方有一个推荐的图标吗?右击推荐图标,选择审查元素,打开谷歌控制台,如下图所示 我们现在想知道votePost方法到底在哪?跟着我这样做,在Console面板里面输入votePost然后回车 直接点击上图标红的链接,控制台将定位到Sources面板

利用CSS3的transform属性让元素在页面居中

今天学到让元素在页面中水平居中的新写法,利用了CSS3的transform属性,通过设置translate的值来改变元素的位置. 1.先来看看怎么实现的 页面中放一个div,width和height随便设置大小和背景色,以便查看效果: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>利用CSS3的

利用CSS的Clip属性来创造多彩文字

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> &l

SSIS的Connection Manager的作用域分为package和project

SSIS的Connection Manager的作用域分为package和project,在Package作用域中创建的Connection Manager只能在当前package中使用,不能在其他package中使用:所有package都能使用当前Project作用域中的Connection manager. 1,创建package作用域的Connection Manager 这个LocalHost.DB_Study只能在当前package中使用. 2,创建Project作用域的Connect