MODIFY 子句
使用 MODIFY 子句更改表或索引的分片列表中现有分区上的现有分片表达式,或定义、修改或禁用范围区间或滚动窗口分片结构。
使用 MODIFY 子句更改表或索引的现有分片列表。您可以使用此子句完成以下一个或多个任务:
l 将现有的分片从一个 dbspace 移动到另一个不同的 dbspace 中
l 更改与现有基于列表或基于表达式分片相关的表达式
l 更改在范围区间分片列表中定义过渡分片的表达式
l 重命名一个或多个现有的分片
l 启用或禁用区间分片的自动创建方式
l 替换 dbspace 的列表或指定存储新区间分片的函数
l 将一个滚动窗口列表更改为按区间分片的表(没有清除策略)
l 将按范围区间分片的表更改为滚动窗口列表C
l 按一下一个或多个操作来更改滚动窗口列表的清除策略:
o 重新设置区间分片的数量的限制
o 更改对表的已分配的存储大小的限制
o 替换 ATTACH or DISCARD 关键字选项
o 替换 ANY 或 INTERVAL FIRST 或 INTERVAL ONLY 关键字选项
ALTER FRAGMENT 语句的 MODIFY 子句具有以下语法:
MODIFY 子句
分片表达式
用法
如果不更改存储位置,那么此处的 dbspace 和 old(或 old 和 new )可以是相同的。对于按范围区间分片的表或索引,dbspace 指定的列表遵循 STORE IN 关键字替换在声明 ALTER FRAGMENT . . . MODIFY 语句之前的 dbspace 列表。之前 dbspace 列表中的分片不会被此选项重置。
STORE IN 子句可以选择指定返回现有 dbspace 名称的用户定义函数,而不是文字 dbspace 标识列表。此 UDF 声明的标识为随意的。有关此 UDF 及如何创建它的示例的更多信息,请参阅在 CREATE TABLE 主题 Interval fragment 子句 中 STORE IN 子句的讨论。
要使用 MODIFY 子句更改 expression 和移动它的对应分片到新的存储位置时,您必须更改 expression 并且必须指定不同于 dbspace 或分区的名称。
如果同一表或索引的多个分片与 dbspace 名称相同,那么就必须声明 new 分片的名称。在范围区间分片的 new 分片之前必须使用 PARTITION 关键字(但是它对循环分片和基于表达式的分片是可选的)。
expression 必须求出一个 Boolean 值(true 或 false)。
expression 中不允许任何子查询或聚集。此外内置的 CURRENT 、DATE 、DBINFO 、SYSDATE 和 TODAY 表达式是无效的。
当您使用 MODIFY 子句更改表达式而不变更此表达式的存储位置时,您必须使用与 old 分片的和 new 的分片的名称相同。然而,如果 dbspace 只由一个单独的分区组成,您可指定参考以下示例为 old 和 dbspace 指定名称:
ALTER FRAGMENT ON TABLE cust_acct
MODIFY dbsp1 TO acct_num < 65 IN dbsp1;
对于分片列表策略,如果新的列表表达式与同一表中或索引中的其他分片的现有列表表达式重叠,那么 ALTER FRAGMENT MODIFY 失败并发送错误。
当您使用 MODIFY 子句将一个 dbspace 移动到另一个 dbspace 中时,old 是分片以前位置的 dbspace 的名称,dbspace 是该分片的新位置。如下所示:
ALTER FRAGMENT ON TABLE cust_acct
MODIFY PARTITION part1 TO PARTITION part2 (acct_num < 35) IN dbsp2;
以上修改了 cust_acct 表的分布方案的 ALTER FRAGMENT语句 ,这样 acct_num 列中小于 35 的所有行项 (先前被分配到分片 part1 的存储在 dbspace dbsp1中)将会分配到存储在 dbspace dbsp2 中的分片 part2 。
当您使用 MODIFY 子句时,底层的 dbspace 不会受到影响。仅会影响到这些分片或 dbspace 中的数据。
如果已经存在非余项分片,除非此分片策略是范围区间策略,您才能重新定义一个非余项分片为余项分片(其他分片的不符合分片键值的行)。然而,如果 REMAINDER 分片中的记录不满足新的 expression,则您无法将该 REMAINDER 分片更改为一个非余项分片。
attached 索引与它的表具有相同的存储分布。如果表上所有的索引是连接的索引,并且您使用 MODIFY 子句修改此表分片,那么数据库服务器会自动修改此索引的存储分布策略以适应新的表分片策略。
old 规范无引用按范围分区存储分布方案分片的表的过渡分片(最后一个范围分片)。该分片唯一有效的修改是使用 TRANSITION TO const_expr 子句增加此过渡值。有关其它直接尝试重新定义此过渡分片范围表达式的语法,数据库服务器返回错误。 有关更多信息,请参阅主题使用 MODIFY INTERVAL TRANSITION 选项。