在现有范围右分区中添加分区左边界 table
add partition left boundary in an existing range right partitioned table
我的分区函数创建右范围类型的分区。数据迁移后发现 partition_number 中有一个边界值小于我的分区函数中声明的边界。因此,例如,如果我的最小分区键是 5,我在分区号 1 中找到值 1、2、3 和 4。我需要做的是改变我的分区函数,添加边界 1、2、3 和 4.How我要这样做吗?在这种情况下拆分范围是否有效? sql 服务器将如何在新分区中重新安排我的数据。它会通过改变 table 来完成这项工作吗?我需要做一些额外的事情吗?我是否需要备份以防出现问题?
我猜您的情况如下:您有一个右范围分区,其最低边界值为 5,并且 table 以这种方式进行分区,例如:
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)
现在,如果您将值 1、2、3、4 和 5 输入 table T 并检查每个分区内值的分布,您会发现 1、2、3 和 4在分区 1 中,5 在分区 2 中:
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 物理移动到它们的新目标分区。因此,如果有数百万这样的行,这将需要一些时间并且会破坏您的事务日志。
我的分区函数创建右范围类型的分区。数据迁移后发现 partition_number 中有一个边界值小于我的分区函数中声明的边界。因此,例如,如果我的最小分区键是 5,我在分区号 1 中找到值 1、2、3 和 4。我需要做的是改变我的分区函数,添加边界 1、2、3 和 4.How我要这样做吗?在这种情况下拆分范围是否有效? sql 服务器将如何在新分区中重新安排我的数据。它会通过改变 table 来完成这项工作吗?我需要做一些额外的事情吗?我是否需要备份以防出现问题?
我猜您的情况如下:您有一个右范围分区,其最低边界值为 5,并且 table 以这种方式进行分区,例如:
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)
现在,如果您将值 1、2、3、4 和 5 输入 table T 并检查每个分区内值的分布,您会发现 1、2、3 和 4在分区 1 中,5 在分区 2 中:
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 物理移动到它们的新目标分区。因此,如果有数百万这样的行,这将需要一些时间并且会破坏您的事务日志。