Package在执行过程中,不可避免地会发生错误,如果处理错误?简单粗暴的做法,是Package直接停止运行。对于一个成熟的ETL工具,这显然不是唯一的错误处理方法。如果在数据流中出现错误,那么数据流组件可以把错误行输出,这只需要在组件的ErrorOutput中进行简单地配置。跟数据流相比,控制流中包含错误处理程序OnError,对错误事件的处理更加复杂和精细。

用户可以通过MaximumErrorCount属性和OnError事件处理程序来对错误进行控制:

  • Package本身、Task 和 Container具有属性MaximumErrorCount,用于控制错误之前组件可以出错的次数 ;
  • OnError事件处理程序能够捕获Task或容器中触发的OnError事件,并对错误进行处理。

一,属性MaximumErrorCount用法

属性MaximumErrorCount 指定Task组件在失败之前可以出错的次数,当累积的错误达到属性MaximumErrorCount的值时,Task执行失败。该属性的默认值是1,也就是,只要发生错误,组件就会失败。

1,测试容器的MaximumErrorCount

设置容器的属性MaximumErrorCount=2,其子Task发生一个错误,执行情况如下图所示:

容器执行成功,子Task执行失败,这是由于容器的MaximumErrorCount属性是2,还没有达到失败的阈值,因此容器的执行结果是成功的。在Progress 选项卡中,SSIS 报出Warning信息:

Warning: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED.  The Execution method succeeded, but the number of errors raised (1) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.

SSIS Package 最终的执行结果是

失败的原因是错误会继续向父组件传递,直到传递到Root Level(Package),而Package的MaximumErrorCount=1。

2,测试Package的属性MaximumErrorCount

把Package的属性MaximumErrorCount设置为2,把容器的属性MaximumErrorCount设置1,查看Package的执行结果

在Progress Tab中查看执行过程:

[Execute SQL Task2] Error: Executing the query "insert into dbo.test_env
values(1,N'test_error')" failed with the following error: "An explicit value for the identity column in table 'dbo.test_env' can only be specified when a column list is used and IDENTITY_INSERT is ON.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

二,OnError事件的错误处理程序

在一个OnError 事件的处理程序中,如果把系统变量Propagate属性设置为False,那么不需要修改父容器的MaximumErrorCount属性,就能保证在发生错误后,Package可以继续运行。

1,测试系统变量 Propagate

为容器下的Execute SQL Task创建OnError事件处理程序,把OnError的事件处理程序中的系统变量 Propagate设置为False

查看package的执行结果,虽然Execute SQL Task 2执行失败,但是容器的执行结果是成功的,Package的执行结果也是成功的,如下图所示:

从Progress中查看到的错误消息是:

[Execute SQL Task] Error: Executing the query "insert into dbo.test_env
values(1,N'test_error')" failed with the following error: "An explicit value for the identity column in table 'dbo.test_env' can only be specified when a column list is used and IDENTITY_INSERT is ON.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

2,从SSISDB中查看错误

把Package部署到Integration Services Catalog中,查看执行的结果,Satus是Succeeded,Error messages中显示错误的信息。

四,错误对执行结果和消息的影响

控制流中发生的任何错误,都会被SSIS引擎捕获;不管如何设置Task或Container的属性,只要发生错误,就会产生错误消息。

错误能够向上传递,当错误被OnError事件处理程序捕获时,通过设置系统变量Propagate为False时,可以停止错误向父级别传递。

Package的执行结果收到属性的控制,组件抛出错误,Package仍然可能执行成功,只不过progress中会记录错误消息。

SSIS 处理错误的方法的更多相关文章

  1. SQL SERVER 9003错误解决方法 只适用于SQL2000

    SQLSERVER 9003错误解决方法 只适用于SQL2000 (只适用于SQL2000) "无法打开新数据库 'POS'.CREATE DATABASE 中止. (Microsoft S ...

  2. New XAMPP security concept:错误解决方法

    New XAMPP security concept:错误解决方法 (2014-03-06 16:07:46) 转载▼   分类: php 在Linux上配置xampp后远程访问域名报错: New X ...

  3. hadoop本地库与系统版本不一致引起的错误解决方法

    hadoop本地库与系统版本不一致引起的错误解决方法 部署hadoop的集群环境为 操作系统 centos 5.8 hadoop版本为cloudera   hadoop-0.20.2-cdh3u3 集 ...

  4. mysql Access denied for user root@localhost错误解决方法总结(转)

    mysql Access denied for user root@localhost错误解决方法总结(转) mysql Access denied for user \'root\'@\'local ...

  5. Eclipse 出现Some sites could not be found. See the error log for more detail.错误 解决方法

    Eclipse 出现Some sites could not be found.  See the error log for more detail.错误 解决方法 Some sites could ...

  6. eWebeditor编辑器上传图片路径错误解决方法[疑难杂症]【转,作者:unvs】

    做了一个多版本的网站,后台用的编辑器是eWebeditor,NET版,后面发现上传图片或者文件之后,路径错误无法显示,必须手工修改才行.. 为了更清楚的说明问题,我下面会说的比较详细,首先是网站文件框 ...

  7. 网站启动SSL, http变为https后,session验证码错误解决方法

    网站启动SSL, http变为https后,session验证码错误解决方法   最近公司需要后台启动安全证书,证书安装完毕后,后台老提示 验证码错误,经过几天的研究,此问题已经得到有效解决,现把方法 ...

  8. 【转贴】Linux系统NGINX负载均衡404错误处理方法

    NGINX负载均衡404错误处理方法 使用NGINX 实现负载均衡,但一组服务器的数据不是实施同步,主服务器有了数据要过段时间才同步到其他服务器 upstream   image.stream.com ...

  9. Oracle OCI-22053:溢出错误解决方法

    原文 Oracle OCI-22053:溢出错误解决方法 Oracle 数值数据类型最多可存储 38 个字节的精度.当将 Oracle 数值转换为公共语言运行库数据类型时,小数点后边的位数可能过多,这 ...

随机推荐

  1. 使用Github的高级搜索功能

    使用Github的高级搜索功能 1. 首先,提供Github高级搜索帮助页面 https://help.github.com/categories/search/ 2. 搜索语法 https://he ...

  2. EditPlus 自动格式化js、html、css,以EditPlus 文本编辑器v3.41(1145)为例

    工具/原料   edtools.rar 方法/步骤     下载工具包:edtools.rar ,解压后放到磁盘的一个目录,如D:/edTools   打开ED,打开“工具”-“配置用户工具”,在弹出 ...

  3. (1)Object类 (2)包装类和数学处理类 (3)String类

    1.Object类1.1 基本概念 java.lang.Object类是Java类层次结构的根类,任何类都是Object类的直接/间接子类. 1.2 常用的方法(重点) Object() - 无参构造 ...

  4. U-Mail如何实现邮件营销自动化?

    对于很多企业来说,人力成本可能就是最大的成本支出了,如果能节省这方面成本支出,也就意味着公司增收了,因此很多公司在做营销工作时,都希望营销能够高效率.有系统.有规划.循序渐进的开展,同时还要减轻营销人 ...

  5. 使用Linux进行缓冲区溢出实验的配置记录

    在基础的软件安全实验中,缓冲区溢出是一个基础而又经典的问题.最基本的缓冲区溢出即通过合理的构造输入数据,使得输入数据量超过原始缓冲区的大小,从而覆盖数据输入缓冲区之外的数据,达到诸如修改函数返回地址等 ...

  6. 解决win7远程桌面连接时发生身份验证错误的方法

    远程桌面连接,是我们比较常用的一个功能了,但有时突然不能用了,以下是我遇到该问题,并解决该问题的方法.连接时报的是“发生身份验证错误,要求的函数不受支持”,解决之后细想一下,该问题好像是在我在电脑上安 ...

  7. python中pandas里面的dataframe数据的筛选小结

    pandas大家用的都很多,像我这种用的不够熟练,也不够多的就只能做做笔记,尽量留下点东西吧. 筛选行: a. 按照列的条件筛选 df = pandas.DataFrame(...) # suppos ...

  8. numpy的array数据类型(创建)

    import numpy as np # 创建 # 创建一维数组 a = np.array([1, 2, 3]) print(a) ''' [1 2 3] ''' # 创建多维数组 b = np.ar ...

  9. python基础整理3——前端

    html概述和基本结构 html概述 HTML意思是超文本标记语言 html基本结构 一个html的基本结构如下: <!DOCTYPE html> <html lang=" ...

  10. 了解python wed 框架

    随着人工智能发展,python这门编程语言也渐渐被人们熟知.至于python为什么能AL的时代脱颖而出可以看一下旁边的网址了解一下https://blog.csdn.net/lixingshi/art ...