我有一个date
使用 RANGE LEFT 的简单的基于分区函数...
CREATE PARTITION FUNCTION [PF_YEAR_LEFT](date) AS RANGE LEFT
FOR VALUES (N'1992-12-31', N'1993-12-31', N'1994-12-31')
GO
CREATE PARTITION SCHEME [PS_YEAR_LEFT] AS PARTITION [PF_YEAR_LEFT]
TO ([DATA_1992], [DATA_1993], [DATA_1994], [DATA_1995])
GO
在上面的代码中,文件组 [DATA_1995] 将保留超出最后一个分区边界的值。所以,如果我选择添加新的文件组并以这种方式拆分函数以获得额外的边界......
ALTER PARTITION SCHEME [PS_YEAR_LEFT] NEXT USED [DATA_1995]
GO
ALTER PARTITION FUNCTION [PF_YEAR_LEFT]() SPLIT RANGE (N'1995-12-31')
GO
ALTER PARTITION SCHEME [PS_YEAR_LEFT] NEXT USED [DATA_1996]
GO
ALTER PARTITION FUNCTION [PF_YEAR_LEFT]() SPLIT RANGE (N'1996-12-31')
GO
对于超出最高边界的值,文件组 [DATA_1995] 保留在最后一个分区位置。
最后一个文件组是否可以在最初创建分区方案后更改,或者是通过创建新分区方案并将使用旧方案的所有索引重建到新方案中的唯一方法?
函数的最后一个分区
RANGE LEFT
是永久分区,不能删除,RANGE RIGHT
函数的第一个分区也不能。这是我的表分区最佳实践文章中详述的考虑因素之一,也是为什么我建议为增量时间类型使用更直观的RANGE RIGHT
函数以及预期范围内的数据的显式边界。您不需要重建现有的表和索引来修复命名错误的文件组。如果您使用脚本添加新分区(注意确保 SPLIT 分区为空),您将得到以下方案:
您可以使用虚拟文件组(或 PRIMARY)上的最后一个分区创建一个新方案,创建一个新的对齐表,将除最后一个分区(如果没有 1997+ 数据则为空)之外的所有分区切换到新表中,删除旧表,重命名等。示例如下。