Sql 在现有范围右分区表中添加分区左边界

Sql 在现有范围右分区表中添加分区左边界,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我的分区函数创建正确的范围类型分区。事实证明,在数据迁移之后,分区1中的边界值小于分区函数中声明的边界值。例如,如果我的最小分区键是5,我在分区号1中找到了值1、2、3和4。我需要做的是改变我的配分函数,增加边界1,2,3和4。我该怎么做?在这种情况下,分割范围有效吗?sql server将如何在新分区中重新排列数据。它仅仅通过改变桌子就能完成任务吗?我需要做些额外的事情吗?我是否需要备份以防出现问题?我猜您的情况如下:您有一个正确的范围分区,最低边界值为5,并且一个表正以这种方式进行分区,例如

我的分区函数创建正确的范围类型分区。事实证明,在数据迁移之后,分区1中的边界值小于分区函数中声明的边界值。例如,如果我的最小分区键是5,我在分区号1中找到了值1、2、3和4。我需要做的是改变我的配分函数,增加边界1,2,3和4。我该怎么做?在这种情况下,分割范围有效吗?sql server将如何在新分区中重新排列数据。它仅仅通过改变桌子就能完成任务吗?我需要做些额外的事情吗?我是否需要备份以防出现问题?

我猜您的情况如下:您有一个正确的范围分区,最低边界值为5,并且一个表正以这种方式进行分区,例如:

create partition function pf (int) as range right for values (5)
create partition scheme ps as partition pf to ([PRIMARY], [PRIMARY])
create table T (part_key int constraint PK_T primary key)
on ps (part_key)
现在,如果您在表T中输入值1、2、3、4和5,并检查每个分区内的值分布,您将在分区1中找到1、2、3和4,在分区2中找到5:

insert T values (1), (2), (3), (4), (5)
select part_key, $partition.pf(part_key) as partition from T
要在自己的分区中获取每个值,您需要做的是: -为每个新分区添加一个新的目标文件组,然后 -从最高值开始分割分区范围

这可能看起来像:

alter partition scheme ps next used [PRIMARY]
alter partition function pf() split range (4)

alter partition scheme ps next used [PRIMARY]
alter partition function pf() split range (3)

alter partition scheme ps next used [PRIMARY]
alter partition function pf() split range (2)
现在,如果您再次检查您的值分布,您将看到所有不同的值最终都在一个单独的分区中:

select part_key, $partition.pf(part_key) as partition from T

但是,请注意,这与数据移动有关,即分区键值为1-4的所有行都需要从原始分区2物理地移动到新的目标分区。因此,如果有数百万这样的行,这将需要一些时间,并会破坏您的事务日志。

这是非常清楚的。只有一个问题,我如何选择下一个使用的文件组。(我的分区基于日,文件组基于月)