SSIS 延迟验证(DelayValidation)
验证是一个事件,该事件在Package执行时,第一个被触发,验证能够避免SSIS引擎执行一个有异常的Package或Task。延迟验证(DelayValidation)是把验证操作延迟到Package真正运行(run-time)时开始执行,当禁用延迟验证时,一旦验证操作返回错误(Error)或警告(Warning),Package就不会继续执行下去。在更新海量的数据时,通常需要用到暂存表把远端数据加载到本地,这就需要在Package执行之后,创建暂存表(staging table);在Package执行之后,删除暂存表,当禁用延迟验证时。当禁用延迟验证时,验证操作在Package执行之前,会检测暂存表是否存在,由于暂存表需要在Package执行之后创建,因此,验证事件发出错误消息,Package停止运行,这对这种情况,必须使用延迟验证,在真正引用到暂存表时,延迟暂存表是否存在。
一,延迟验证属性
延迟验证属性作用于Package,Task,容器(Container)和链接管理器(Connection Manager),默认情况下,禁用延迟验证,这就意味着,在Package执行时,首先验证Package,Task,容器和链接管理器引用的对象是否有效,如果有任何对象不存在,那么验证失败,Package停止运行。
在Package开始执行之前,验证Package,能够尽早发现错误,避免浪费系统资源去执行一个必定会失败的Package,这是一个性能优化的功能。
二,验证方式
按照验证的执行顺序来看,Package包含两种类型的验证方式:
- Package Validation:在Package执行时,首先验证Package及其包含的所有组件,是Package级别的验证;
- 组件验证:组件级别的验证,包含Task , Connection Manager和Container,在组件开始执行之前,验证组件中引用对象的有效性。
验证分为两个阶段(Phrase),首先进行Package级别的验证,而后进行组件级别的验证:

Package级别的验证包含组件级别的验证,如果禁用延迟验证,那么组件级别的验证会执行两次,这在设计Package时,不是一个好的选择,这会增加Package的验证时间,还会增加每一次打开Package进行编辑的时间。而启用延迟验证,这会禁用了Package 级别的验证,以至于在Package的设计时(design-time),只执行组件级别的验证,注意,任何情况下,无法禁用组件级别的验证。
通常情况下,对一个完成开发的Package启用延迟验证,是一个好的选择,这会减少Package整体的执行时间,因为跳过了Package级别的验证。
1,禁用延迟验证
禁用Package的延迟验证,需要设置Package的DelayValidation属性值为False,默认情况下,Packag会禁用延迟验证,如下图所示:

那么在Package开始运行之后,第一件事就是开始执行Package Validation,当Package级别的验证操作完成之后,开始验证Package包含的各个Task等,如果验证发现错误,Package不会被执行,直接报错。
2,启用延迟验证
启用Package的延迟验证,需要设置Package的DelayValidation属性值为True,如下图所示:

当启用延迟验证时,Package会执行下去,知道运行到特定的组件时,才会执行组件验证,如果组件验证失败,那么抛出错误消息,停止Package的运行。
组件验证发生真正执行组件,如果上流组件新建一个暂存表(staging table),下游组件引用该暂存表,并不会出现异常,这是因为在该组件进行验证时,该暂存表已经存在。
三,延迟验证属性的层次结构
在Package级别上设置DelayValidation属性并不能阻止打开Package时的最初的验证过程,它只是在运行包时延迟Package级别的验证,这就意味着Package将继续运行,但是当打开Package时警报仍然出现。如果想阻止打开Package时的验证,那么必须把Task级别上的DelayValidation属性设置为True。
避免验证链接管理器,有时,是一个非常节省开发时间的选择。有时打开Package的过程会花费很长的时间,这可能是因为它引用了一个远程数据源,而数据源的响应很缓慢,或者链接不上。如果我们正在开发一个包,并且需要经常打开这个包,那么我们可能需要花费很长的时间来等待SSIS验证一个数据源。在这样的情况下,在任务级设置DelayValidation属性为True可以为我们节省大量的时间。
示例1,验证操作只会验证属性的完整性
设置Package Level的属性DelayValidation=False,Task Level的属性DelayValidation=False

Package的处理流程如下图所示,Package级别的Validation在Create Staging Table的Validation之前开始,在Insert Data的Validation之后结束,从图中能看到Insert Data的验证完成,实际上,验证操作并没有检查出一个非常简单的语法错误,直到Task真正执行时,才发现错误,这说明,验证操作只会验证Task属性的完整性,效果是有限的。

示例2,验证操作会验证引用的对象是否存在
设置Package Level的属性DelayValidation=False,Task Level的属性DelayValidation=False,在Data Flow Task中的OLE DB Source组件中从一个当前不存在的表dbo.delay_test中selelct数据,会出现异常。

在执行Package时,SSIS弹出“Package Validation Error”的窗体,这就是Package级别上的验证:

设置Package Level的属性DelayValidation=True,Task Data Flow Task的属性DelayValidation=False,重新执行package成功
示例3,打开package的验证
设置Package Level的属性DelayValidation=True,Task Level的属性DelayValidation=False,在打开Package时,Task Data Flow Task上面是有红色X号的,当设置Task Level的属性DelayValidation=True时,在打开package时,Task Data Flow Task上面的红色X符号消失,这说明,在打开Package时,验证操作已经开始,并且Task 级别的验证属性会覆盖上层的验证。
以上三个示例说明,在打开Package,设计Package和运行Package时,SSIS引擎都会对Package进行验证,并且Package的验证操作是优层次结构的,底层的延迟验证会覆盖上层的延迟验性。
SSIS 延迟验证(DelayValidation)的更多相关文章
- SSIS的DelayValidation属性
一,DelayValidation Property true if validation of the package is delayed until run time. false if the ...
- SSIS 遍历目录,把文件内容导入数据库
最近接手一个项目,程序的基本框架是:程序A导出数据,以.tsv格式存储,数据列之间以tab间隔:程序B吃文档,把数据导入到数据库中,并把处理过的文档备份/移动到指定的目录中.为了快速开发,程序B设计成 ...
- SSIS 属性:ExecValueVariable
有些Task组件执行完成之后,会产生输出结果,称作Execution Value,例如,Execute SQL Task在执行完成之后,会返回受影响的数据行数.Task组件的Execution Val ...
- 使用SSIS汇集监控数据
1.背景 数据库服务器部署有各类巡检脚本,现在想把巡检收集到的数据汇集到一起.Source源对应的是各业务数据库服务器,Destination目标对应的是保存汇集数据的服务器.前期部署的时候已将巡检相 ...
- SSIS 组件属性整理
整理SSIS 组件的属性解释及其用法 一,ExecValueVariable属性 有些Task组件执行完成之后,会产生输出结果,称作Execution Value,例如,Execute SQL Tas ...
- 第二篇 Integration Services:SSIS数据泵
本篇文章是Integration Services系列的第二篇,详细内容请参考原文. 简介SSIS用于移动数据.数据流任务提供此功能.因为这个原因,当介绍SSIS时我喜欢从数据流任务开始.数据流任务的 ...
- Oracle11g 密码延迟认证导致library cache lock的情况分析
在 Oracle 11g 中,为了提升安全性,Oracle 引入了『密码延迟验证』的新特性.这个特性的作用是,如果用户输入了错误的密码尝试登录,那么随着登录错误次数的增加,每次登录前验证的时间也会增加 ...
- 【译】第二篇 Integration Services:SSIS数据泵
本篇文章是Integration Services系列的第二篇,详细内容请参考原文. 简介SSIS用于移动数据.数据流任务提供此功能.因为这个原因,当介绍SSIS时我喜欢从数据流任务开始.数据流任务的 ...
- 表单(上)EasyUI Form 表单、EasyUI Validatebox 验证框、EasyUI Combobox 组合框、EasyUI Combo 组合、EasyUI Combotree 组合树
EasyUI Form 表单 通过 $.fn.form.defaults 重写默认的 defaults. 表单(form)提供多种方法来执行带有表单字段的动作,比如 ajax 提交.加载.清除,等等. ...
随机推荐
- Intellij IDEA设置运行时Java参数
1.选中类,点击顶部菜单:Run-->Edit Configuration,如下所示: 2.选择Application,指定的类,在右边选择Configuration,并在VM options中 ...
- rabbitmq配置镜像模式
学习是spring cloud的时候用到了rabbitmq,在实际项目中也用到了,镜像模式是集群的基础上面配置的,就多了一个数据同步,rabbitmq存储消息用的是cookie,配置之前先同步cook ...
- CSS之clearfix清除浮动
.clear { clear: both; height: 0; overflow: hidden; display: block; line-height: 0 } .clearfix:afte ...
- http中的get和post(二)
博客园精华区有篇文章< GET 和 POST 有什么区别?及为什么网上的多数答案都是错的 >,文中和回复多是对以下两个问题进行了深究: 长度限制 Url 是否隐藏数据 在我看来这两者都不是 ...
- Fiori缓存与它的清除
最近在修改已有的Fiori应用,遇到了缓存上的一点问题,导致对Fiori应用的代码修改不能在前端页面生效.现将自己查到的一篇好资料翻译过来,以供参考.以下为正文. 2017.12.19更新:最近又遇到 ...
- iOS 网络状态判断方案(支持iOS11和iPhoneX)
在之前的iPhone中.我们可以根据导航栏上方的网络状态view.来判断网络状态.(这种方案本来就不太好) 这种方案在iPhone X 手机上.不可使用. 我们可以通过 Reachability 来 ...
- jsp上的九个隐含对象
首先说一说件jsp的原理.jsp被认为最经典的解释是 “嵌入了java 代码的html”. 在网上查了一些资料,和我本身对jsp的认识,总结如下: jsp本质上是一个servlet,继承自 当第一次 ...
- vs发布项目webconfig替换语法
关于vs发布项目时webconfig替换语法也是最近才学到的东西,写这篇文章就当是作个备忘录吧,如果能帮助别人能够学习到webconfig如何替换那就再好不过了. 1.认识一下web项目下的web.D ...
- bzoj 2588 Count on a tree
Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...
- openstack操作之二 restful api
Restful api 是openstack各服务调用的接口,简单理解为可以通过网络去调用的函数.postman是一款前端调用工具,测试后端接口的时候往往是使用该工具去验证.在openstack的使用 ...