我有一个大约有110个分区的桌子。我希望存档最旧的分区并删除FileGroup。以下是我采用的策略。
创建了一个确切的空表 tablename_archive 并满足所有分区要求。
执行分区切换
ALTER TABLE tablename SWITCH PARTITION 1 TO tablename_archive PARTITION 1
验证交换机(分区交换)后,我删除了已归档的表。
使用第一个边界值合并分区函数,如下所示
ALTER PARTITION FUNCTION YMDatePF2 () MERGE RANGE ('2012-01-01 00:00:00.000')
虽然现在FG上没有数据,但当我尝试删除文件或FG时,它出错了。
The file 'XXXXXXXX' cannot be removed because it is not empty.
The filegroup 'XXXXXXXX' cannot be removed because it is not empty.
在合并函数之后,我是否需要对分区方案进行任何更改。
如果您需要更多详细信息,请与我们联系。
答案 0 :(得分:0)
您永远不能从RANGE RIGHT
分区函数中删除第一个(或唯一的)分区(或相反,RANGE LEFT
函数的最后一个(或唯一)分区)。从基础分区方案中的第一个(或最后一个if RANGE LEFT
)文件组也永远不能从方案中删除。请记住,除分区边界外,还有一个分区和分区方案文件组映射。
如果您的目的是存档2012年1月的数据,则应该切换分区2而不是1,因为第一个分区包含的数据小于' 2012-01-01 00:00:00.000'。现在已合并第二个分区,第一个分区(和第一个文件组)包含的数据小于' 2012-02-01T00:00:00.000',其中包括2012年1月的数据。
使用RANGE RIGHT
滑动窗口,最好计划将第一个文件组保留为空。您可以使用PRIMARY
文件组或虚拟文件组,没有文件用于此目的。请参阅Table Partitioning Best Practices。