SQL 服务器 Table 分区切换后无法删除文件组

SQL Server Table Partitioning Cannot drop Filegroup after Partition Switch

我有一个巨大的 table,大约有 110 个分区。我希望存档最旧的分区并删除文件组。以下是我采用的策略。

  1. 创建了一个完全空的 table tablename_archive 并满足所有分区要求。

  2. 执行分区切换

    ALTER TABLE tablename SWITCH PARTITION 1 TO tablename_archive PARTITION 1 
    
  3. 验证开关(分区交换)后,我删除了存档table。

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

    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.

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

如果您需要更多详细信息,请告诉我。

您永远不能从 RANGE RIGHT 分区函数中删除第一个(或唯一的)分区(或者相反,RANGE LEFT 函数的最后一个(或唯一的)分区)。来自底层分区方案的第一个(或最后一个,如果 RANGE LEFT)文件组也永远不能从方案中删除。请记住,您比分区边界多了一个分区和分区方案文件组映射。

如果您打算存档 2012 年 1 月的数据,您应该切换分区 2 而不是 1,因为第一个分区包含的数据小于“2012-01-01 00:00:00.000”。现在第二个分区已经合并,第一个分区(和第一个文件组)包含小于“2012-02-01T00:00:00.000”的数据,其中包括 2012 年 1 月的数据。

随着 RANGE RIGHT 滑动 window,最好计划将第一个文件组留空。为此,您可以使用 PRIMARY 文件组或没有文件的虚拟文件组。参见 Table Partitioning Best Practices