≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 数据库 > SQL Server

SQL Server SSIS 延迟验证示例

人气:314 时间:2020-06-11

这篇文章主要为大家详细介绍了SQL Server SSIS 延迟验证示例,具有一定的参考价值,可以用来参考一下。

感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!

验证是一个事件,该事件在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包含两种类型的验证方式:

 

P

ackage 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=False,Task Data Flow Task的属性DelayValidation=True,重新执行,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 延迟验证方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持四海网。

本文来自:http://www.q1010.com/179/9095-0.html

注:关于SQL Server SSIS 延迟验证示例的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:SQL SERVER

您可能感兴趣的文章

  • 解决SqlServer 各版本 sa帐户不能登录问题
  • Windows使用性能监视器监控SqlServer的常见指标示例
  • 调整SQLServer2000运行数据库结构的简单示例
  • 解决SQLServer远程连接失败的问题
  • 数据库触发器DB2和SqlServer区别解析
  • 解决在Azure上部署Sqlserver网络访问不了示例
  • 在sqlserver中如何使用CTE解决复杂查询问题
  • SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(下)
  • SqlServer如何通过SQL语句获取处理器(CPU)、内存(Memory)、磁盘(Disk)以及操作系统相关信息
  • SQLServer中merge函数用法分析
上一篇:SQL Server中T-SQL 数据类型转换的简单示例
下一篇:SQL Server帐号被禁用的简单示例
热门文章
  • SQL Server SQL获取第一条记录的方法
  • SQL Server出现System.OutOfMemoryException异常的解决方法
  • SQL Server的 update from 语句的简单示例
  • SQL Server 数据库备份方法菜鸟教程
  • SQL Server 多表关联时在where语句中慎用trim()方法
  • SQL Server数据类型及长度限制详细说明
  • mybaits非配置原因,导致SqlSession was not registered for synchronization异常解析
  • SQL Server 收缩后对数据库的使用有影响吗?
  • SQL Server 格式导致的Excel导入sql出现异常的解决方法
  • SQL Server 连接服务器出现错误 7391的解决方法
  • 最新文章
    • SQL Server存储过程基本语法的简单示例
    • sql查询时增加自动编号和分页的简单示例
    • sql轻松应付百万数据的高效数据分页存储过程的简单示例
    • sql获取一条数据中所有字段的名称和值的实现方法
    • sql分割函数的简单示例
    • SQL Server异常捕获的简单示例
    • SQL SERVER回滚恢复误操作数据的实现方法
    • SQL Server函数或存储过程中抛出异常的实现方法
    • SQL Server创建数据库的完整代码
    • SQL Server创建数据库的命令用法示例

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。