范围区间分片的 MODIFY 子句的限制
ALTER FRAGMENT 语句的 MODIFY 子句无法更改此区间值或分片键。要变更此范围区间存储 分布方案的任意元素,您必须使用 ALTER FRAGMENT 语句的 INIT 选项。
如果以下任一条件为真,那么 MODIFY 子句不能更改一个分片的范围表达式的值:
⚫ 此分片是最后一个分片,新的值比旧的值小。
⚫ 新的值与现有分片的临值重叠。
⚫ 此分片是系统生成的区间分片。
您可以修改用户定义范围分片的值,但是新的值不能超过相邻分片的界值,而且数据库服务器必须
要满足新范围表达式所指示的任何数据移动。
MODIFY 子句能更改存储现有分片的存储空间的列表,并且可以更改将要存储新的系统生成的区
间分片的存储空间的列表,但是同样的 MODIFY 子句不能都完成这两个任务。要将两个列表都更
改,必须声明两个单独的 ALTER FRAGMENT . . . MODIFY 语句。
类似地,启用或禁用当前范围区间分片方案的 MODIFY 子句不能将现有范围区间分片移动到一个 不同的 dbspace 或者创建新的用户定义分片。这些任务都需要单独的 ALTER FRAGMENT . . . MODIFY 语句。
对于表的范围分片和按区间分片的索引,您可以修改首个和中间分片的分片表达式。重叠的分片可 通过移动数据来解决,从而使存储在重新定义范围分片中的行的分片键值不会重叠。然而,对于最 后一个范围分片,只有此新的范围表达式满足以下条件使,您才可以修改其分片表达式的过渡值:
⚫ 它不部分或完全符合任何现有区间分片表达式。
⚫ 它不会符合任何之后系统自动生成的区间分片表达式。
⚫ 新过渡遗留在分片间的间隙必须是 intvl_expr 区间值的整数倍。
您不能定义一个按范围区间分片的表的余项分片。
如果您使用 MODIFY 子句重命名现有分片,那么新的名称不能以字符 sys_p 开头。
范围、区间和过渡分片
对于使用范围区间存储分片策略的对象,可用于区分三种类型的分片:
⚫ range 分片是它的的名称、分片键表达式和存储位置在表或索引定义中被定义的分片。范 围区间分片需要定义至少一个范围分片。
⚫ interval 分片是它的的名称、分片键表达式和存储位置是由数据库服务器插入或加载操作 试图存储分片键值对现有的分片的分片键值表达式为 false 的行时自动定义的分片。
⚫ 范围分片在 VALUES 子句的上限值比任一其他名为 transition 分片的范围分片的分片键 表达式都大。 过渡分片的 VALUES 子句中指定的上限被称为表的 transition value。如果 没有为此对象创建区间分片,那么要添加比过渡值大的分片键值时则需要数据库服务器创 建新的区间分片。
在过渡分片上执行的 ALTER FRAGMENT 语句的 MODIFY 子句的操作比其它范围和区间分区的 MODIFY 操作更受限制。 ALTER FRAGMENT MODIFY 语句不能更改定义一个过渡分片的范围表达式,除非它包含 MODIFY TRANSITION 关键字。
数据库服务器不能创建区间分片除非在表或索引定义中的 Interval Fragment 子句定义了范围区间分 片键,并且此该分片结构没有被 ALTER FRAGMENT . . . MODIFY INTERVAL DISABLE 语句禁 用。




