导出 (0) 打印
全部展开
此主题尚未评级 - 评价此主题

ALTER FEDERATION (Windows Azure SQL Database)

注:本页面内容可能不完全适用中国大陆地区运营的 Windows Azure服务。如要了解不同地区 Windows Azure 服务的差异, 请参考本网站.

Important重要提示
本主题未经维护。有关最新版本,请参阅 ALTER FEDERATION

修改数据在联合内的分布。

语法约定 (Windows Azure SQL Database)


ALTER FEDERATION federation_name
{
    SPLIT AT (distribution_name = boundary_value)
    | DROP AT ([LOW|HIGH] distribution_name = boundary_value)
}[;]
federation_name
要创建的联合的名称。该名称必须在 SQL Database 中唯一,必须符合标识符的规则,且类型必须为 sysname。

distribution_name
联合键的名称。该名称是用于引用联合键的标识符,并且引用与联合相关的语句,例如 CREATE TABLE … FEDERATED ON(...) 或 USE FEDERATION。Distribution_name 必须符合标识符的规则且类型必须为 sysname。

Boundary_value 是重新分区操作的分界点。边界值应是由联合的联合键指定的数据类型的有效值。在 SPLIT 操作中,对于作为此操作的一部分创建的新联合成员,该值将会成为 range_low 和 range_high。

SPLIT AT (distribution_name = boundary_value)
将当前包含边界值的联合成员中的数据移入两个新的联合成员。其联合键实例小于 boundary_value 的联合表中的所有行将复制到其中一个新目标联合成员。大于等于边界值的实例将复制到另一个新联合成员。针对对象定义的所有其他对象(例如引用表、存储过程、函数、用户和权限)都被克隆到新的联合成员。

DROP AT ([LOW|HIGH] distribution_name = boundary_value)
删除某个联合成员并扩展其相邻联合成员的范围以填补 DROP 操作产生的间隙。此操作将同时影响正在删除的联合成员和将进行扩展以填补间隙的相邻联合成员。LOW 或 HIGH 确定在给定的 boundary_value 上将被删除的联合成员。该边界值必须与联合中的现有分区值(联合成员的 range-high 或 range_low)相对应。

在 DROP 操作期间,不会在受影响的联合成员之间执行架构比较。DROP 不需要数据的物理副本,它会重置连接并更改受影响的联合成员的 db_name()。

DROP 是一个异步操作。

SPLIT 操作的属性

  • ALTER FEDERATION … SPLIT 语句必须是批处理中的唯一语句,且不能是外部事务的一部分。

  • ALTER FEDERATION … SPLIT 语句只有在连接到联合根数据库时才能执行。

  • 在受影响的联合成员上,一次只能有一个 DROP 或 SPLIT 命令处于活动状态。同时可以有许多 DROP 和 SPLIT 命令处于活动状态,只要这些命令针对联合中的不同成员操作。

  • 所有目标联合成员(由于 SLIPT 操作而创建的联合成员)都继承源联合成员的 MAXSIZE 和 EDITION 属性。

  • SPLIT 操作是一个原子操作。必须成功创建并同步所有目标成员才能完成 SPLIT。

  • SPLIT 操作是一个异步操作。

    在 SPLIT 执行期间

    • 所有常规(非联合)对象、架构和系统元数据将从正在执行 SPLIT 的源联合成员复制到目标联合成员。此列表包括用户、角色、对象权限、sprocs、视图、联合表或引用表以及索引等。唯一的例外是标记为要重新计算的分布统计信息。在重新分区操作之后,标记为 NORECOMPUTE 的统计信息将会保留,且不会在联合表上重新计算。

    • 所有联合表架构将从正在进行 SPLIT 的源联合成员复制到目标联合成员。

    • 联合表中的用户数据将移动到基于边界值的目标联合成员。

    • 将克隆所有引用表中的用户数据,然后将这些数据移到目标联合成员。

    在 SPLIT 完成后;

    • 新联合成员包含对应目标联合成员中的所有最新数据。

    • sys.federation_members 视图已更新为使新目标联合成员包含其范围值。源联合成员已删除,并且已不存在于 sys.databases 或 sys.federation_members 中。

    • 断开与源联合成员的所有现有连接。重试时,新连接将路由到新的联合成员。

DROP 操作的属性

  • ALTER FEDERATION … DROP 语句必须是批处理中的唯一语句,且不能是外部事务的一部分。

  • ALTER FEDERATION … DROP 语句只有在连接到联合根数据库时才能执行。

  • 指定的边界值需要与联合中的现有范围边界(range_high、range_low)相对应。

  • DROP 操作是一个异步操作。

    在开始 DROP 操作后,LOW 或 HIGH 选项以及指定的边界值确定将删除的联合成员。将扩展相邻联合成员以便涵盖已删除联合成员的范围。

    在执行 DROP 时,不会执行任何数据传输,也不会发生任何架构比较。

    在完成 DROP 时;

    • 剩余的联合成员被重命名。

    • sys.federation_members 表不再包括已删除的联合成员,并且具有针对剩余的联合成员的更新的范围。

    • 断开与联合成员的所有现有连接。已删除的联合成员不再接受连接。剩余的联合成员将断开所有现有连接。

联合操作的安全注意事项

若要对联合执行 CREATE、ALTER 和 DROP 操作,您必须连接到联合根,且您必须是服务器上的 dbmanager 角色的成员。您还必须是数据库的 dbo 组的成员。

SPLIT 和 DROP 语句要求您具有对源联合成员以及连接到的服务器的 CREATE 和 DROP DATABASE 权限。在 Windows Azure SQL Database 中,此权限被限制为 dbmanager 服务器角色的成员。无论执行操作的是哪个用户帐户,源联合成员的所有者都将成为目标联合成员的所有者。

SPLIT 和 DROP 操作的并发

只要源或目标联合成员未重叠,便允许同时执行多个 DROP 或 SPLIT 操作。

  • DROP AT (LOW distribution_name = boundary_value)

    将联合成员删除到边界值的 LOW,并将联合成员的范围扩展到边界值的 HIGH。例如,假定一个联合 (fed1) 包含三个联合成员,这三个成员的范围分别为 0-100 (db1)、100-200 (db2) 和 200-300 (db3),那么发出 ALTER FEDERATION fed1 DROP AT (LOW customer_id=200) 命令将执行以下操作:

    1. 对 db2 以及 100-200 之间的所有数据执行 DROP 操作

    2. 将 db3 重命名为 db4。Db4 的 Dbid 将保持不变。

    3. Db4 现涵盖 100-300 的范围

  • DROP AT (HIGH distribution_name = boundary_value)

    将联合成员删除到边界值的 HIGH,并将联合成员的范围扩展到边界值的 LOW。例如,假定一个联合 (fed1) 包含三个联合成员,这三个成员的范围分别为 0-100 (db1)、100-200 (db2) 和 200-300 (db3),那么发出 ALTER FEDERATION fed1 DROP AT (HIGH customer_id=200) 命令将执行以下操作:

    1. 对 db3 以及 200-300 之间的所有数据执行 DROP 操作

    2. 将 db2 重命名为 db4。Db4 的 Dbid 将保持与 db2 的相同。

    3. Db4 现涵盖 100-300 的范围

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

社区附加资源

添加
显示:
© 2014 Microsoft. 版权所有。