我们有一个Windows Azure联邦数据库,我们需要把它变成一个正常的数据库(由于联邦很快就会退役)。
在阅读了大量的文档并尝试了各种方法后,答案似乎是ALTER FEDERATION…切换出命令:-
https://msdn.microsoft.com/library/dn269988.aspx从联邦成员数据库中删除所有联邦元数据和约束。执行后,federation成员是一个独立的数据库。
命令的格式如下:-
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)
因此,获取上述所有信息后,我查询Federation值,它返回以下内容:-
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,因为这是我用来连接到联邦的值,但这会给出相同的错误,就像-1和1一样,对于LOW和HIGH。
我还尝试在运行命令之前指定使用联邦根:-
USE FEDERATION ROOT WITH RESET
GO
ALTER FEDERATION CustomerFederation SWITCH OUT AT (LOW cid = -9223372036854775808)
我试过从主数据库和联邦数据库运行它。
是否有人成功使用ALTER FEDERATION…换掉指挥,能给我指个正确的方向吗?
在寻找了更多之后,我发现了一个联邦迁移实用程序的链接:
https://code.msdn.microsoft.com/vstudio/Federations-Migration-ce61e9c1查看代码,正确的命令似乎是我已经尝试过的命令:
ALTER FEDERATION CustomerFederation SWITCH OUT AT (HIGH cid = -9223372036854775808)
这次成功了。不知道为什么第一次没有,可能是我在它把它扔出去之前尝试了别的东西。