标签:
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,设置ForcedExecutionResult=@[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>
利用SSIS的ForcedExecutionResult 属性 和CheckPoint调试Package
标签:
原文地址:http://www.cnblogs.com/ljhdo/p/4804273.html