我有一个按日期列分区的表,每个分区存储一个月的数据。
此外,每个分区与一个文件组相关联,每个文件组只有一个 db 文件 (NDF)。
我的设置非常简单:
CREATE PARTITION FUNCTION MyPF (DATE)
AS RANGE RIGHT FOR VALUES (
'2019-09-01',
'2019-10-01',
'2019-11-01',
'2019-12-01');
CREATE PARTITION SCHEME MyPS PARTITION MyPF
TO (
FG_2019_08,
FG_2019_09,
FG_2019_10,
FG_2019_11);
我需要定期截断随机月份(有时甚至从中间截断,而不触及其他月份)。
我没有进行复杂的切换,而是从 BOL 中发现,TRUNCATE TABLE 在我的 SQL Server 2017 中有 WITH 选项,所以我只能说:
TRUNCATE TABLE MyTable WITH (PARTITIONS(3));
TRUNCATE TABLE MyTable WITH (PARTITIONS(1));
这将从与 FG_2019_08 和 FG_2019_10 关联的文件中删除分区中的所有行。
这很好用,现在我有一个空文件,但 SQL Server 不允许删除:它说它仍在使用中。我的理解是,我仍然需要调整分区函数和分区架构,以删除空的 NDF 文件。
我检查了 BOL,但我无法理解如何更改(合并?)边界值,以反映上述更改。他们应该变成这样,对吧?
ALTER PARTITION FUNCTION MyPF (DATE)
AS RANGE RIGHT FOR VALUES (
'2019-10-01',
'2019-12-01');
ALTER PARTITION SCHEME MyPS PARTITION MyPF
TO (
FG_2019_09,
FG_2019_11);
如果我需要改变的话,谁能告诉我如何改变这两个对象?