ValidateExternalMetadata

ValidateExternalMetadata

我有一个程序包,它从表中读取数据,并基于列值将记录存储在其他两个表中。包使用“交易必填”属性。直到最近,当我在源表上创建非聚集索引以提高性能时,它一直运行得很顺利。在将进度显示为“验证已开始”之后,程序包拒绝继续执行。

有两件事可以解决问题:


使用聚集索引而不是非聚集索引
将ValidateExternalMetadata属性设置为False


我不必同时使用其中之一,而且程序包运行平稳。我选择了选项1,但我不了解幕后情况。我的问题是


除了检查列元数据之外,将属性设置为false时会发生什么情况?
为什么非聚集索引会引起验证问题?


PS:以前在表上没有索引。

最佳答案

上一个答案中的KB linked to应该可以解决此特定问题,但不能完全说明ValidateExternalMetadata标志的作用。

与外部系统交互的大多数SSIS组件(例如,Lookup Transform或Source / Destination组件)将定义“外部元数据列”。这些代表与组件进行交互的表/视图/查询中的列。此元数据信息被缓存在包文件(.dtsx)中。

Validation阶段,组件应进行检查以确保包中缓存的元数据仍与基础表/视图/查询同步。如果不匹配,则组件返回特殊状态(VS_NEEDSNEWMETADATA)。当这种情况在设计时发生时,SSIS通过调用ReinitializeMetadata()触发元数据刷新。在运行时,这将导致错误。

因为元数据验证可能很昂贵(例如,具有很多列的大型表),所以ValidateExternalMetadata标志可以设置为false以禁用此验证。通常,只有在确定包和基础表/视图/查询将保持同步时,才执行此操作。

08-24 17:03