【问题标题】:Returning the current SSIS Error Count返回当前 SSIS 错误计数
【发布时间】:2014-08-28 14:39:32
【问题描述】:

在 SSIS 包中有 MaximumErrorCount 属性。该属性的使用意味着在包执行期间,包正在计算错误的数量。

在执行一组特别复杂的包期间的各个点(通常在各个点将 MaximumErrorCount 设置为更高的级别),我希望能够捕获当前的错误计数 - 但我似乎找不到一种机制来做到这一点。

理想情况下,它是一个系统变量(它不是我能看到的),所以我可以随意构建表达式,但更糟糕的是,我似乎也找不到在脚本中捕获它的方法(我的 VB.net 技能很差,所以我可能错过了它,但我在对象浏览器中进行了谷歌搜索,但没有成功)。

任何 SSIS 专家都知道我如何在包的执行过程中捕获给定点的当前错误计数?

(我尝试将一个简单的变量增量嵌入到包级别的 OnError 事件处理程序中,但在极少数情况下,这似乎与引擎“计数”的实际错误数量不同步。无论如何,如果有一个内置的计数器,那将是非常受欢迎且更优雅的)

提前致谢。

【问题讨论】:

  • MaximumErrorCount 存在于所有任务和包级别上。恕我直言,调整这个值不是一个非常聪明的主意。最后,您可能会四处奔波,试图找出哪个任务具有什么价值,除非您想将它保持在所有任务 + 包的标准级别。
  • 干杯 rvphx,我同意,但这些包是继承的。我的命令是解决它们,而不是重写它们(我希望!!)
  • 通常处理捕获错误数据的方式是通过日志记录。错误计数很有趣,但有关错误的详细信息更有帮助。如果您希望收集每次执行的错误计数,我会在包中设置日志记录,然后查询日志表。
  • 干杯马克,这又是一个好主意,但这些包中已经有日志记录活动,这对于检索执行后的最终错误计数很好。我很好奇是否有一种方法可以在包执行期间方便地返回当前的错误计数,并(可能)采取相应的行动(例如,在控制流中,如果 ErrorCount > 3 流 A,如果 ErrorCount

标签: sql vb.net ssis


【解决方案1】:

通常,您会使用约束来指导错误处理流程。即,如果特定任务失败,则使用失败约束来引导控制流。如果要根据错误数量创建容差,则需要在每个任务之后在变量中捕获每个错误(同样,使用约束和脚本任务)。

我认为没有公开的计数器可以保存任务或容器的当前错误数,但是这样的计数器将作用于每个对象和包本身。即使你能做到,这听起来也会很痛苦。

我的建议是尽可能使用开箱即用的东西:

  • 使用约束来指导成功和失败行为
  • 不要使用事件处理程序,因为它们就像一个不可见的 GOTO,你永远不知道它们在哪里
  • 继续运行代码以使其成功而不是容忍错误。提高最大错误计数并且永远不知道出了什么问题是很可怕的。我的意思是除非你不关心你的数据。这句话我并不是在开玩笑 - 在将数据迁移到测试环境时,这可能是完全可以接受的行为。
  • 谨慎使用变量。其中一些软件包中可能有一些需要注意的关键点,因此不要添加错综复杂的变量,这些变量将使故障排除和维护变得更加困难。如果您可以随着时间的推移将最大错误计数降低到 1,那么您可能只会更改包中的几个点(80/20?)。如果你真的必须重写整个事情,那么......那么一开始就是垃圾,而且很好摆脱,对吧?

【讨论】:

  • 嗨,马克,我赞成并将您的答案标记为答案,因为我还得出结论,从谷歌搜索到死亡,访问系统错误计数器的具体问题 根本不可能,因为它似乎没有暴露出来,你的建议非常接近地反映了我对这些(可怕的!)包的整个问题的想法!感谢您的考虑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多