验证是一个事件,该事件在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)的更多相关文章

  1. SSIS的DelayValidation属性

    一,DelayValidation Property true if validation of the package is delayed until run time. false if the ...

  2. SSIS 遍历目录,把文件内容导入数据库

    最近接手一个项目,程序的基本框架是:程序A导出数据,以.tsv格式存储,数据列之间以tab间隔:程序B吃文档,把数据导入到数据库中,并把处理过的文档备份/移动到指定的目录中.为了快速开发,程序B设计成 ...

  3. SSIS 属性:ExecValueVariable

    有些Task组件执行完成之后,会产生输出结果,称作Execution Value,例如,Execute SQL Task在执行完成之后,会返回受影响的数据行数.Task组件的Execution Val ...

  4. 使用SSIS汇集监控数据

    1.背景 数据库服务器部署有各类巡检脚本,现在想把巡检收集到的数据汇集到一起.Source源对应的是各业务数据库服务器,Destination目标对应的是保存汇集数据的服务器.前期部署的时候已将巡检相 ...

  5. SSIS 组件属性整理

    整理SSIS 组件的属性解释及其用法 一,ExecValueVariable属性 有些Task组件执行完成之后,会产生输出结果,称作Execution Value,例如,Execute SQL Tas ...

  6. 第二篇 Integration Services:SSIS数据泵

    本篇文章是Integration Services系列的第二篇,详细内容请参考原文. 简介SSIS用于移动数据.数据流任务提供此功能.因为这个原因,当介绍SSIS时我喜欢从数据流任务开始.数据流任务的 ...

  7. Oracle11g 密码延迟认证导致library cache lock的情况分析

    在 Oracle 11g 中,为了提升安全性,Oracle 引入了『密码延迟验证』的新特性.这个特性的作用是,如果用户输入了错误的密码尝试登录,那么随着登录错误次数的增加,每次登录前验证的时间也会增加 ...

  8. 【译】第二篇 Integration Services:SSIS数据泵

    本篇文章是Integration Services系列的第二篇,详细内容请参考原文. 简介SSIS用于移动数据.数据流任务提供此功能.因为这个原因,当介绍SSIS时我喜欢从数据流任务开始.数据流任务的 ...

  9. 表单(上)EasyUI Form 表单、EasyUI Validatebox 验证框、EasyUI Combobox 组合框、EasyUI Combo 组合、EasyUI Combotree 组合树

    EasyUI Form 表单 通过 $.fn.form.defaults 重写默认的 defaults. 表单(form)提供多种方法来执行带有表单字段的动作,比如 ajax 提交.加载.清除,等等. ...

随机推荐

  1. 自学Zabbix3.8.1.1-可视化Visualisation-Graphs简单图表

    自学Zabbix3.8.1.1-可视化Visualisation-Graphs简单图表 Zabbix提供了一些简单的图表,用于可视化由项目收集的数据. 用户不需要进行配置工作来查看简单的图表.他们是由 ...

  2. XSS注入,js脚本注入后台

    曾经一度流行sql注入,由于现在技术的更新,已经看不到这问题了,但是又出来新的安全问题,XSS攻击,他的原理就是在前端提交表单的时候,在input标签当中输入js脚本,通过js脚本注入后台,请看下图. ...

  3. JDBC开源框架:DBUtils使用入门

    在单元测试过程中,只涉及到数据库的直接操作来验证业务逻辑是否正确的情况,DBUtils非常适合使用.它结构简单,包小,友好处理掉那些jdbc异常,让你更专注于业务代码,而非底层的操作.官网对它的定义: ...

  4. Linux权限分析

    我看过网上的一些有关Linux的权限分析,有些说的不够清楚,另外一些说的又太复杂.这里我尽量简单.清楚的把Linux权限问题阐述明白,Linux权限没有那么复杂. Linux权限问题要区分文件权限和目 ...

  5. Dos与Linux的断行字符

    Symptom Dos和Linux下面的断行字符是不一样的,至于哪里不一样的呢,先举个例子看一看 Cause 我们也可以使用cat -A filename分别查看Dos和Linux下创建的文件,会发现 ...

  6. Java 硬件同步机制 Swap 指令模拟 + 记录型信号量模拟

    学校实验存档//.. 以经典的生产者消费者问题作为背景. 进程同步方式接口: package method; /** * P表示通过,V表示释放 */ public interface Method ...

  7. C#又能出来装个B了。一步一步微信跳一跳自动外挂

    PS:语言只是载体.思维逻辑才是王道 前天看见了个python的脚本.于是装python.配置环境变量.装pip.折腾了一上午,最终装逼失败. 于是进入博客园,顶部有篇文章吸引了我 .NET开发一个微 ...

  8. nginx搭建rtmp协议流媒体服务器总结

    最近在 ubuntu12.04+wdlinux(centos)上搭建了一个rtmp服务器,感觉还挺麻烦的,所以记录下. 大部分都是参考网络上的资料. 前提: 在linux下某个目录中新建一个nginx ...

  9. which 命令详解

    一.which 作用: which 命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录, which 命令会在环境变量$PATH 设置的目录里查找符合条件的文件.也 ...

  10. 教你如何安装配置Windows7系统 IIS IIS7.5本地浏览测试网站 完整版介绍

    大家都知道网站建设前期测试于浏览网站都喜欢用iis本地浏览来操作 那么为了方便大家自己来安装和配置Internet信息服务 相信大家,对于Windows 7有了相应的了解,从操作上,使用上,内置功能上 ...