导出 (0) 打印
全部展开

联合指导原则和限制

更新时间: 2015年1月

本主题介绍针对 Microsoft Azure SQL Database 中的联合的指导原则和限制。在下面的各节中将介绍这些一般性的指导原则和限制:

Important重要提示
联合的当前实现将随 Web 和企业服务层一起停用。请考虑使用 Azure SQL Database 的弹性缩放在 Azure SQL Database 上生成分片的向外扩展解决方案。若要试用弹性缩放,请参阅 Azure SQL Database 弹性缩放预览版入门

联合既可以包含联合表,也可以包含引用表。联合表是使用 FEDERATED ON 子句创建的表,包含与用于包含联合的分发键相关联的一列。引用表是联合内并非使用 FEDERATED ON 子句创建的表,并且没有与联合分发键的特殊关联。有关创建表的详细信息,请参阅 CREATE TABLE

联合表具有以下限制:

  • 联合表的联合列只能包含符合联合成员范围 range_low(含)到 range_high(不含)的数据。

  • 联合列的数据类型必须精确匹配在联合定义中定义的数据类型。

  • 联合表上的所有唯一索引和聚集索引都必须包含联合列。联合列在索引中出现的顺序可能不同于联合中的键序号。

  • 联合列值不能更新到联合成员范围之外的值。

  • 联合列不能是持久化或非持久化计算列。

  • 在联合成员中不支持索引视图。

  • 联合列不能是可为 NULL 的。

  • 针对联合表的所有外键约束都需要以在外键中相同的序号在引用方和被引用表上包括联合列。引用表不能具有与联合表的外键关系。被引用表可以具有与引用表的外键关系并且没有任何约束。

  • 你可以按常规方式删除使用 FEDERATED ON 子句创建的表。你也可以使用 ALTER TABLE 更改联合表的几乎所有属性,只有联合键之类的属性除外。若要将引用表更改为联合表,或者将联合表更改为引用表,你必须创建具有所需属性的新表并且删除现有表。

  • 在某个表用 STATISTICS_NORECOMPUTE 标记时,SPLIT 之类的联合操作不会使统计信息失效或重新计算统计信息。这可能会在重新分区操作(例如 SPLIT)后导致执行计划问题。

  • 联合成员支持标识属性

  • 联合成员支持 timestamp 和 rowversion 数据类型。

联合表的所有一般表元数据可通过标准系统视图获取。联合特定属性可通过 sys.federated_table_columns 获取。

引用表不会自动分布在所有联合成员上。尽管引用表可以手动复制到联合成员上,但没有自动复制流程。

引用表通常包含对联合表的查询的支持信息,因此,你无需对多个数据库执行查询。例如,尽管客户信息可以联合并且分布到多个成员数据库中,但从联合的州和邮政编码引用信息中不会有任何收获。但是,你可能希望在各联合成员中存储州和邮政编码信息的副本,这样,你的查询将不必跨多个数据库。

geography 和 geometry 类型不能用作作为表联合依据的列的数据类型;但是可将其作为联合表的一部分。在将空间数据与联合一起使用时,没有其他的限制。

执行 SPLIT 或 DROP 操作之后,目标联合成员中的空间索引将保持一致和完整。

hierarchyid 类型不能用作作为表联合依据的列的数据类型;但是可将其作为联合表的一部分。在将 hierarchyid 与联合一起使用时,没有其他限制。

执行 SPLIT 或 DROP 操作之后,目标联合成员中的 hierarchyid 索引将保持一致和完整。

连接到联合是通过 USE FEDERATION 语句执行的。此命令自动将连接路由到某一联合内的正确成员,这样在访问数据时便无需知道物理数据库名称。指定联合分发键和值将建立与该联合内的相应成员数据库的连接。

对包含联合的数据库的身份验证和授权照常实现。登录名和用户将确定连接;角色将管理主体分组。但是,包含联合的数据库内主体的作用域仅是联合根数据库,并且这些主体不会自动应用于联合成员。有关用户和角色的详细信息,请参阅管理数据库联合 (Azure SQL Database)

无法对包含联合的数据库执行数据库复制操作。如果在数据库中正在进行数据库复制操作,那么创建联合操作将失败。也无法对联合成员执行数据库复制操作。

联合操作不适用于联合根配额。如果根数据库超过配额,你仍然可以执行 SPLITDROP 操作。同样地,如果联合成员超出大小配额,也仍可以执行 SPLITDROP 操作,前提是该操作不会导致超出目标数据库配额。

在完成 SPLITDROP 等重新分区操作后,将删除连接。这意味着也将重置连接属性(如 SET 选项)、事务隔离级别设置或变量。SPLIT 操作创建一个新的物理数据库,这意味着在各个 SPLIT 操作之间无法保持下列 Transact-SQL 属性。

 

Transact-SQL SQL Database 支持限制 使用联合的数据库中的支持

timestamp 和 rowversion 数据类型

SQL Database 可能不会跨故障转移保留当前数据库 (DBTS) 的未提交的 timestamp 和 rowversion 值。

timestamp 和 rowversion 数据类型在联合成员中不受支持。

当给定的数据库中不存在 timestamp 和 rowversion 时,与 timestamp 和 rowversion 相关的函数(如 @@dbts)会返回值。

SYSUTCDATETIME()、SYSDATETIMEOFFSET()、SYSDATETIME()、getdate()、getutcdate()current_timestamp

SQL Database 可能报告本地计算机的 timestamp 和 rowversion,并且还可能跨故障转移报告更远的将来或过去时间。

支持,但对重新分区操作具有相同的约束。

DATABASE_PRINCIPAL_ID()

保证主体 SID 对于给定主体名称的联合成员和联合根是相同的。但是主体 ID 可能会在进行重新分区操作(如 DROP)后发生更改。

列的 IDENTITY 属性

IDENTITY 属性在联合成员中不受支持。由于联合成员中不可以存在标识列,因此与标识相关的函数(例如,IDENT_CURRENT、IDENT_SEED、IDENT_INCR 和 SCOPE_IDENTITY)始终返回 null。

与用户定义对象一起使用的 OBJECT_ID 和相关函数;object_id(…)、object_name(object_id)、type_id(…)、type_name(type_id)

用户定义对象的任何对象 Object_id 可能会在进行重新分区操作(如 DROP)后发生更改。

所有 Azure SQL Database 数据库设置均受支持;但是,更改联合根数据库上的某个选项的值并不会更改任何联合成员的对应选项。

另请参阅

显示:
© 2015 Microsoft