SQL Server表分区无法在分区切换后删除文件组

时间:2017-10-05 16:51:05

标签: sql-server archive partitioning

我有一个大约有110个分区的桌子。我希望存档最旧的分区并删除FileGroup。以下是我采用的策略。

  1. 创建了一个确切的空表 tablename_archive 并满足所有分区要求。

  2. 执行分区切换

    ALTER TABLE tablename SWITCH PARTITION 1 TO tablename_archive PARTITION 1 
    
  3. 验证交换机(分区交换)后,我删除了已归档的表。

  4. 使用第一个边界值合并分区函数,如下所示

    ALTER PARTITION FUNCTION YMDatePF2 () MERGE RANGE ('2012-01-01 00:00:00.000')
    
  5. 虽然现在FG上没有数据,但当我尝试删除文件或FG时,它出错了。

        The file 'XXXXXXXX' cannot be removed because it is not empty.
    
        The filegroup 'XXXXXXXX' cannot be removed because it is not empty.
    

    在合并函数之后,我是否需要对分区方案进行任何更改。

    如果您需要更多详细信息,请与我们联系。

1 个答案:

答案 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