ValidateExternalMetadata属性,这到底是做什么的?

时间:2010-07-21 07:32:09

标签: sql-server ssis

我有一个从表中读取数据的包,并根据列值将记录存储在另外两个表中。包使用Transaction required属性。直到最近,我在源表上创建了一个非聚集索引以提高性能,它运行顺畅。在将“进度”显示为“验证已启动”之后,程序包拒绝继续执行。

有两件事可以解决问题:

  1. 使用聚集索引而不是非聚集
  2. 将ValidateExternalMetadata属性设置为False
  3. 我不必同时使用它们,而且包装顺利运行。我选择了选项1,但我不明白引擎盖下发生了什么。我的问题是,

    1. 除了检查列元数据外,当您将属性设置为false时会发生什么?
    2. 为什么非聚集索引导致验证问题?
    3. PS:之前桌子上没有索引。

2 个答案:

答案 0 :(得分:11)

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

与外部系统交互的大多数SSIS组件(例如,查找转换或源/目标组件)将定义外部元数据列。它们表示组件与之交互的表/视图/查询中的列。此元数据信息缓存在包文件(.dtsx)中。

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

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

答案 1 :(得分:0)