销售电话: 1-800-867-1380

管理数据库联合 (Azure SQL Database)

更新时间: 2014年4月

Important重要提示
联合的当前实现将随 Web 和企业版一起停用。请考虑部署自定义分片解决方案,来最大限度地提高可伸缩性、灵活性和性能。有关自定义分片的详细信息,请参阅向外扩展 Azure SQL Database

可以使用 Transact-SQL 语句、函数和视图来创建、更改和监视联合。本主题提供了有关管理联合的信息。

每个联合以根和初始联合成员开头。这些根和成员是使用 CREATE FEDERATION 语句创建的。在创建联合之后,可使用 USE FEDERATION 语句连接到联合根,然后将 CREATE TABLEFEDERATED ON 子句一起使用来创建联合表结构。

若要向外扩展联合,可以使用 ALTER FEDERATION 语句将现有联合成员拆分为新的成员。SPLIT 操作将标识要通过指定为该操作的一部分的联合键值进行拆分的成员。将在指定值处拆分联合成员,并生成两个新的联合成员,后者包含之前包含在源成员中的行的总数。

ALTER FEDERATION 也可用于通过 DROP AT 操作减少联合成员的数量。已删除成员先前涵盖的联合键值的范围将转换为相邻成员;但此操作不会保留先前与此范围关联的数据。

note备注
无法通过使用 CREATE DATABASEDROP DATABASE 命令创建或删除联合成员。

DROP FEDERATION 语句可用于删除联合,包括所有联合成员以及其他关联的元数据和逻辑对象。

此外,联合成员完全支持 ALTER DATABASE

尽管可以直接连接到包含联合数据的物理数据库,但这不是连接的最佳方法,因为此方法依赖于对单个成员数据库名称的了解。USE FEDERATION 语句通过在联合根中路由所有连接来提供更轻松的连接方式,并且不要求你知道单个成员数据库的名称,而只需知道联合名称和联合键。

连接可使用 WITH FILTERING=ON 子句进行筛选,以使连接上的操作的作用域仅限于与联合键值匹配的联合原子单元。启用筛选后,查询处理程序会向引用了联合表的每个查询添加在联合列上包含联合键值的谓词。

Warning警告
联合原子单元不是安全边界,因此,查询处理程序不保证同一联合成员内各单元之间的信息完全隔离。不要将筛选作为安全隔离机制而过分依赖。

为了确定是否已筛选某个连接,sys.dm_exec_sessions 将返回一个 is_filtered 列。此列的数据类型是位;如果已筛选连接,则返回 1,否则返回 0。如果已筛选连接,则可以使用 FEDERATION_FILTERING_VALUE 来确定筛选值。

对包含联合的数据库的身份验证与对不包含联合的数据库的身份验证相同。但是,安全主体(如用户和角色)的设置作用域是联合根数据库,该设置不会自动复制到任何联合成员。

不允许联合成员包含具有登录名的用户。相反,联合成员中创建的用户帐户将链接到联合根中具有相同名称的帐户。联合成员中的角色将作为非联合数据库进行管理。

创建第一个联合成员后,执行语句的帐户将成为联合成员的所有者。若要将联合根中的现有主体添加到联合成员,数据库所有者必须使用 CREATE USER 语句在联合成员中创建用户,然后使用 ALTER USER 语句将该用户链接到联合根数据库中的现有主体。用户名必须与联合根的 sys.database_principals 中的主体名称完全匹配。不支持将用户链接到用户之外的角色或其他类型的主体。

note备注
如果用户名与联合根中的现有主体名称不完全匹配,则语句将失败,并显示以下错误消息:

“user_name”不是有效的 user_name 或你没有相应的权限

联合根数据库中的用户和角色将创建为非联合数据库的用户和角色。

链接用户可用作联合成员内的常规用户帐户。他们可参与 EXECUTE AS 子句,并可添加到角色中。使用 EXECUTE AS 时,将不支持 WITH NO REVERT 子句,因为链接用户未启用信任和 dbchaining。

以下视图提供了有关联合操作的信息。只要操作正在执行,这些视图就会报告信息,在操作完成后,信息将立即被清理。

 

联合操作视图 说明

sys.dm_federation_operations

返回有关联合级别操作的信息

sys.dm_federation_operation_members

返回有关操作中所涉及的联合成员的信息

sys.dm_federation_operation_errors

返回有关在执行联合操作期间发生的错误的信息

sys.dm_federation_operation_error_members

返回有关已遇到错误的操作中涉及的联合成员的信息

可从以下视图中获得描述联合、成员以及在联合中使用的分发方案的其他元数据。此外,sys.databases 现将返回一个名为 is_federation_member 的列,其包含指示某个数据库是否为联合成员的位值。

 

联合元数据表 说明

sys.federations

返回数据库中的联合。

sys.federation_members

返回联合中的联合成员。

sys.federation_distributions

返回联合所使用的分布类型和数据类型。

sys.federation_member_distributions

返回分布名称和联合成员所涵盖的范围。

sys.federated_table_columns

返回有关联合表的联合特定信息。

可通过联合历史记录视图获取有关联合操作的历史信息。利用该信息,你可以针对任意给定时间点,重新构造联合根和成员信息(包括成员所涵盖的范围)。联合历史记录视图如下所示:

 

联合历史记录表 说明

sys.federation_history

返回有关联合的历史信息

sys.federation_member_history

返回有关联合成员的历史信息

sys.federation_distribution_history

返回有关联合的分布类型和数据类型的历史信息

sys.federation_member_distribution_history

返回有关联合成员涵盖的范围的历史信息

另请参阅

本文是否对您有所帮助?
(1500 个剩余字符)
感谢您的反馈
显示:
© 2014 Microsoft