繁体   English   中英

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

[英]add partition left boundary in an existing range right partitioned table

我的分区功能创建正确的范围类型分区。 事实证明,在数据迁移之后,在partition_number中,有一个边界值小于我的分区函数中声明的边界。 因此,例如,如果我的最小分区键是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物理移动到其新的目标分区。 因此,如果有数百万个这样的行,这将花费一些时间并且会破坏您的事务日志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM