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. CentOS针对磁盘IO[jdb2进程]的优化

    CentOS的jdb2进程总是沾满io,查了一些资料后才知道,这个问题源自系统bug,在此记录一下解决办法: 将高IO的磁盘,用以下参数remount即可 mount -t ext4 -o remou ...

  2. 审计系统---paramiko模块学习

    paramiko模块学习 [更多参考]http://www.cnblogs.com/wupeiqi/articles/4963027.html [paramiko的Demo实例]https://git ...

  3. (转)如何安装 easy installer+pip

    http://blog.csdn.net/wuxiaobingandbob/article/details/42457807

  4. centos7.4之zabbix4.0的fping监控

    参考博文: https://www.cnblogs.com/lei0213/p/8859326.html 注释:他是额外安装fping的:因为我yum安装的zabbix,fping就已经自带了:安装步 ...

  5. Virtual PC局域网共享速度慢的解决半法。转

    HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DisableTaskOffload 新建字符串,名:DisableTaskOffloa ...

  6. Mina源码研究

    目录 1. NioSocketAcceptor初始化源码研究 1.1 类图 1.2 方法调用时序图 1.3 初始化NioSocketAcceptor 1.4 SimpleIoProcessorPool ...

  7. mysql中FIND_IN_SET函数的使用

    有种需求,A和B是父子关系,B和C是父子关系,C与D亦是父子关系,以此类推,无限级 现在需要查询到某一级(包括本级)下面所有的,就需要用到FIND_IN_SET函数 select * from tab ...

  8. python第八课——random模块的使用

    2.2.如何获取随机整数值? 引入random模块的使用 randint(a,b)函数:作用:返回给程序一个[a,b]范围内的随机整数注意:含头含尾闭区间 思路步骤: 第一步:导入random模块到相 ...

  9. linux中Vi编辑器使用

    1.如需要编辑aaa.txt文件: vi  aaa.txt   就可以进入到   aaa.txt文件中, 输入  i   进入到编辑模式, 按 Esc 退出编辑模式  , :wq   保存退出编辑模式 ...

  10. 【洛谷】【堆+模拟】P2278 操作系统

    from HNOI2003 [题目描述:] 写一个程序来模拟操作系统的进程调度.假设该系统只有一个CPU,每一个进程的到达时间,执行时间和运行优先级都是已知的.其中运行优先级用自然数表示,数字越大,则 ...