了解增量生成

在初始架构生成后,可以使用 SQL Server Data Tools (SSDT)更改多维数据集和维度定义,然后重新运行架构生成向导。 该向导更新主题区域数据库和关联数据源视图中的架构,以反映更改,并尽可能保留表中当前存在的数据,以便重新生成。 如果在初始生成后更改了表,则架构生成向导会尽可能使用以下规则保留这些更改:

  • 如果以前由向导生成了表格,那么该表格将被覆盖。 可以通过将数据源视图中表的属性更改为AllowChangesDuringGenerationfalse,防止向导生成的表被覆盖。 当你接管一个表时,该表将像任何其他用户定义的表一样被对待,并且在重新生成期间不会受到影响。 从生成中删除表后,可以在数据源视图中将表的AllowChangesDuringGeneration属性更改为true,并通过向导重新打开该表进行更改。 有关详细信息,请参阅数据源视图中的“更改属性”(Analysis Services)。

  • 如果表已由某个其他工具添加到数据源视图或基础数据库,其表不会被覆盖。

当架构生成向导重新生成以前在主题区域数据库中生成的表时,可以选择让向导保留这些表中的现有数据。

支持数据保护与保留

作为一般规则,架构生成向导将保留存储在生成的表中的数据。 此外,如果将列添加到向导生成的表,向导也会保留该数据。 可以使用此功能添加或修改维度和多维数据集,然后重新生成基础对象,而无需重新加载存储在基础表中的数据。

注释

如果您从分隔文本文件加载数据,可以选择架构生成向导在重新生成过程中是否覆盖这些文件及其中包含的数据。 文本文件要么完全覆盖,要么根本不覆盖。 架构生成向导不会部分覆盖这些文件。 默认情况下,不会覆盖这些文件。

部分保留

在某些情况下,架构生成向导无法保留现有数据。 下表提供了在重新生成期间向导无法保留基础表中所有现有数据的情况的示例。

数据更改的类型 治疗
不兼容的数据类型更改 架构生成向导尽可能使用标准 SQL Server 数据类型转换将现有数据从一种数据类型转换为另一种数据类型。 但是,将属性的数据类型更改为与现有数据不兼容的类型时,向导会删除受影响列的数据。
引用完整性错误 如果更改包含数据的维度或多维数据集,并且更改会导致在重新生成过程中出现引用完整性错误,则架构生成向导会删除外键表中的所有数据。 删除的数据不限于导致外键约束冲突的列或包含引用完整性错误的行。 例如,如果将维度键更改为具有非唯一或 null 数据的属性,则会删除外键表中的所有现有数据。 此外,删除一个表中的所有数据可能会产生级联效应,并可能导致其他参照完整性冲突。
已删除的属性或维度 如果从维度中删除属性,架构生成向导将删除映射到已删除属性的列。 如果删除维度,向导将删除映射到已删除维度的表。 在这些情况下,向导会删除已删除的列或表中包含的数据。

架构生成向导在删除任何数据之前发出警告,以便你可以取消向导而不丢失任何数据。 但是,架构生成向导无法区分预期数据丢失和意外数据丢失。 运行向导时,对话框会列出包含要删除的数据的表和列。 可以让向导继续并删除数据,也可以取消向导并修改对表和列所做的更改。

支持立方体和维度更改

更改维度和多维数据集的属性时,架构生成向导将重新生成底层主题区域数据库和相关数据源视图中的相应对象,如下表所示。

删除对象,例如维度、多维数据集或属性。
架构生成向导将删除已删除对象映射到的基础对象。 如果将列添加到向导生成的表,则新列不会阻止该表被删除。 删除对象会导致基础对象中存储的数据被删除,如果出现引用完整性错误,也可能导致其他数据被删除。

重命名对象,例如维度、多维数据集或属性。
架构生成向导将要重命名的对象映射到相应的基础对象,并对这些基础对象进行重命名。 该向导还会重命名所有受影响的对象,例如主键。 将保留存储在基础对象中的现有数据。

修改对象,例如更改其数据类型。
架构生成向导修改已更改对象映射到的基础对象。 除非新的数据类型与现有数据不兼容,否则将保留存储在数据库中的基础对象中的现有数据。

添加新对象,例如维度、多维数据集或属性。
架构生成向导将添加新对象映射到的基础对象。

如果由于主题区域数据库中存在用户对象导致数据库引擎返回错误,架构生成向导无法进行所需的更改,并显示数据库引擎返回的错误信息。 例如,如果在向导生成表后对表创建主键约束或非聚集索引,则架构生成向导不会删除该表,因为它未创建约束或索引。

支持方案更改

更改主题区域数据库或关联数据源视图中表或列的属性时,架构生成向导将按照下表中所述处理这些更改。

删除架构生成向导生成的表或列。
如果删除架构生成向导生成的表或列,向导将重新生成已删除的表。 该向导不会警告删除的表或列将被重新生成。

更改架构生成向导生成的表或列的属性。
如果修改由架构生成向导生成的表或列的属性,向导将重新生成更改的表,而无需更改。 例如,如果更改列的数据类型或可为 null 性,或者架构生成向导生成的表的文件组,则更改不会在重新生成中幸存下来。 向导不提供任何警告,指出在没有更改的情况下将重新生成更改的对象。

向由架构生成向导生成的表添加列,或向主题区域数据库或暂存区数据库添加表。
如果将列添加到架构生成向导生成的表,向导会在重新生成过程中保留附加列以及其中存储的任何数据。 但是,如果将表添加到主题区域数据库或临时区域数据库,则架构生成向导不会合并新表。 添加的列或添加的表不会反映在 Analysis Services 项目、Analysis Services 数据库、DTS 包、数据源视图或生成的架构中的任何其他位置。

支持数据源和数据源视图变更

重新运行架构生成向导时,它将重复使用它用于原始生成的相同数据源和数据源视图。 如果添加数据源或数据源视图,向导不会使用它。 如果在初始生成后删除原始数据源或数据源视图,则必须从头开始运行向导。 向导中的所有以前的设置也会被删除。 在下次运行架构生成向导时,绑定到已删除数据源或数据源视图的基础数据库中的任何现有对象都将被视为用户创建的对象。

如果数据源视图在生成时未反映基础数据库的实际状态,则生成架构向导在生成主题区域数据库和暂存区域数据库的架构时可能会遇到错误。 例如,如果数据源视图指定列的数据类型设置为 int,但列的数据类型实际上设置为 string,则架构生成向导将外键 int 的数据类型设置为与数据源视图匹配,然后在创建关系时失败,因为实际数据类型为 string

另一方面,如果将数据源连接字符串更改为与上一代不同的数据库,则不会生成任何错误。 使用新数据库,不会对以前的数据库进行更改。

另请参阅

管理对数据源视图和数据源的更改
架构生成向导 (Analysis Services)