【发布时间】:2015-09-26 04:53:34
【问题描述】:
我们有一个 Windows Azure 联合数据库,我们需要将其转换为普通数据库(由于联合即将停用)。
阅读了大量文档并尝试了各种方法,答案似乎是 ALTER FEDERATION ... SWITCH OUT AT 命令:-
https://msdn.microsoft.com/library/dn269988.aspx
从联合成员数据库中删除所有联合元数据和约束。执行后,联邦成员是一个独立的数据库。
命令的格式如下:-
ALTER FEDERATION federation_name SWITCH OUT AT ([LOW | HIGH] distribution_name = boundary_value)
LOW 或 HIGH 确定将在给定联合边界值的相应侧切换出的联合成员。边界值必须对应于现有联合中的现有分区值 range-high 或 range-low。
还有一个具体的例子可以切换出边界为99的Federation:-
ALTER FEDERATION CustomerFederation SWITCH OUT AT (LOW cid = 100)
因此,根据上述所有信息,我查询了联邦值,它返回以下内容:-
SELECT * FROM sys.federations
federation_id : 65536
name : CustomerFederation
SELECT * FROM sys.federation_members
federation_id : 65536
member_id : 65536
SELECT * FROM sys.federation_distributions
federation_id : 65536
distribution_name : cid
distribution_type : RANGE
system_type_id : 127
max_length : 8
precision : 19
scale : 0
collation_name : NULL
user_type_id : 127
boundary_value_in_high : 1
SELECT * FROM sys.federation_member_distributions
federation_id : 65536
member_id : 65536
distribution_name : cid
range_low : -9223372036854775808
range_high : NULL
但是,无论我尝试为边界值使用什么值,我都会得到以下结果:-
Msg 45026, Level 16, State 1, Line 1
ALTER FEDERATION SWITCH operation failed. Specified boundary value does not exist for federation distribution cid and federation CustomerFederation.
我尝试过使用 range_low 值:-
ALTER FEDERATION CustomerFederation SWITCH OUT AT (LOW cid = -9223372036854775808)
ALTER FEDERATION CustomerFederation SWITCH OUT AT (HIGH cid = -9223372036854775808)
我也尝试了该值的任一侧,因为示例使用 100 到 SWITCH OUT 99
我尝试使用 0,因为这是我用来连接到联邦的值,但是对于 LOW 和 HIGH,它会产生相同的错误,就像 -1 和 1 一样。
我还尝试在运行命令之前指定使用联合根:-
USE FEDERATION ROOT WITH RESET
GO
ALTER FEDERATION CustomerFederation SWITCH OUT AT (LOW cid = -9223372036854775808)
我已尝试从主数据库和联邦运行它。
有没有人成功使用过 ALTER FEDERATION ... SWITCH OUT AT 命令,请指出正确的方向?
【问题讨论】:
标签: sql azure azure-sql-database federation sql-azure-federations