【问题标题】:Moving partition to a new filegroup将分区移动到新文件组
【发布时间】:2020-02-26 22:45:36
【问题描述】:

我有一个按日期分区的大表。 我们在不同的文件组上有 8 个分区,其中一个文件组是 PRIMARY。

我想用一个名为“FG_odsvr_misc”的新文件组替换 PRIMARY 文件组,并从分区架构中删除 PRIMARY。

如果不创建具有新分区函数的新表,我将如何实现这一点?

边界如下所示 -

分区函数如下 -

CREATE PARTITION FUNCTION [fn_odstable1](numeric(9,0)) 
AS RANGE LEFT FOR VALUES (20151231, 20161231, 20171231, 20181231, 20191231, 20201231, 20211231)

分区方案如下 -

CREATE PARTITION SCHEME [sch_odstable1] AS PARTITION [fn_odstable1] 
TO ([FG_odsvr_pre_2016], [FG_odsvr_2016], [FG_odsvr_2017], [FG_odsvr_2018], [FG_odsvr_2019], [FG_odsvr_2020], [FG_odsvr_2021], [PRIMARY])

【问题讨论】:

  • 能否包含您的分区函数和分区方案定义?这可能就像拆分分区函数以将 PRIMARY 上的分区保留为空一样简单,然后他们删除该边界点。

标签: sql-server tsql sql-server-2014 partitioning


【解决方案1】:

好的。您在 PRIMARY 文件组上的分区就是所谓的“永久分区”

来自 Dan Guzman 的表分区最佳实践:

您可能不知道每个分区方案都有一个永久的 永远无法删除的分区。这是第一个分区 RANGE RIGHT 函数和 RANGE LEFT 的最后一个分区。是 创建新分区时注意这个永久分区 涉及多个文件组时的方案,因为文件组在 创建此永久分区的位置由 分区方案已创建,无法从方案中删除。

。 . .

考虑映射包含超出预期范围的数据的分区 到没有基础文件的虚拟文件组。这将保证 数据完整性很像检查约束,因为数据在 不能插入允许的范围。如果你必须适应错误 数据而不是直接拒绝它,而是映射这些分区 到一个通用文件组,如 DEFAULT 或一个专门指定的文件组 为此目的。

http://www.dbdelta.com/table-partitioning-best-practices/

由于这是一个 RANGE LEFT 分区方案,您可以通过在大于表中存在的最大值的边界点拆分最右边的分区,将所有数据从 PRIMARY 移出到新文件组。

ALTER PARTITION SCHEME sch_odstable1 NEXT USED [FG_odsvr_2022];  
ALTER PARTITION FUNCTION fn_odstable1() SPLIT RANGE (20221231);  

不过,最右边的分区仍将位于 PRIMARY 上。您只需要在需要它们保持该分区为空之前创建您未来的分区。如果你愿意,你可以创建一个新的分区方案

alter database current add filegroup no_files_cant_be_used

CREATE PARTITION SCHEME [sch_odstable2] AS PARTITION [fn_odstable1] 
TO ([FG_odsvr_pre_2016], [FG_odsvr_2016], [FG_odsvr_2017], [FG_odsvr_2018], [FG_odsvr_2019], [FG_odsvr_2020], [FG_odsvr_2021], [FG_odsvr_2022], no_files_cant_be_used)

然后在新方案上创建匹配表,ALTER TABLE SWITCH 将所有分区移动到新表中,然后重命名表。

【讨论】:

    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多