SSIS 处理错误的方法

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中会记录错误消息。

(0)

相关推荐

  • OS X Yosemite系统下载失败怎么办?OS X 10.10下载错误解决方法

    苹果在2014年最后一场发布会中结束以后,开放了 Mac 上最新的 OS X Yosemite 系统下载。相信有很多小伙伴在升级更新时,会遇到不少问题,比如下载速度慢,下载错误等。那么OS X Yos ...

  • 为什么ps不能打字?ps不能打字程序错误解决方法

    为什么ps不能打字?小编带来了ps不能打字程序错误解决方法,当我们需要在图片上输入文字却提示失败的话,该怎么处理这样的问题呢?请看下文介绍吧。 依次打开编辑--首选项---文字,然后在文字后面的选项中 ...

  • 宽带连接错误解决方法大集合

    上网最烦的是什么?网速慢,广告,中病毒等等,其中最让人感到烦恼的莫过于那些莫名其妙弹出的“宽带连接错误XXX”的弹窗警告了,经常在这种时候你是上不了网的,身边有手机还好,刷着流量去百度找帖子解决,身边 ...

  • 系统丢失gdiplus.dll文件错误解决方法

    系统丢失gdiplus.dll文件错误解决方法,详细错误如图: 步骤 百度gdiplus.dll文件,找一个地方下载gdiplus.dll文件,下载的时候注意必须符合自己的系统(win7或者XP) 下 ...

  • 解决win7系统唤醒休眠状态出现"拒绝访问"错误的方法

    windows休眠状态是指将所有运行的实时数据存储到硬盘上,并且关闭一切不必要的硬件从而节省电量,无论你所使用的windows是哪个版本,系统都能够让用户自动进入休眠状态,当然在你没有关闭休眠功能的前 ...

  • 如何正确解决Win7路由器引入错误的方法

    现在路由器在我们的日常生活中是很常见的一个工具,他可以实现多台电脑同时连网,几乎家家户户都安装了路由器,不仅电脑可以连上网络,连手机.iPad都可以上网了,但是这也带来了一个弊端,就是一旦路由器出现故 ...

  • 解决wifi共享精灵启动失败出现5023未知错误的方法

    wifi共享精灵是我们常用的网络无线热点创建软件,该软件可帮助我们在支持无线网卡的笔记本中创建wifi热点,从而让其它移动设备通过wifi连接热点,实现上网的目的,而在近期有部分用户在启动wifi共享 ...

  • Linux系统中操作文件数过多导致的错误解决方法

    linux 打开文件数 too many open files 解决方法 too many open files出现这句提示的原因是程序打开的文件/socket连接数量超过系统设定值. 查看每个用户最 ...

  • WinXP安装软件时出现NSIS ERROR错误解决方法

    WinXP安装软件时出现NSIS ERROR错误解决方法.虽然微软已经停止对WinXP的支持,还是有不少用户依然坚持使用XP,不过在安装软件的时候也会出现一些问题,近日有小伙伴说会出现NSIS ERR ...