我们有一个 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 的联邦:-
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 命令并且可以指出我正确的方向吗?