使用 MODIFY 子句更改表或索引的分片列表中现有分区上的现有分片表达式,或定义、修改或禁用范围区间或滚动窗口分片结构。
元素 | 描述 | 限制 | 语法 |
---|---|---|---|
const_expr | 定义要分片要存储的列值或此范围区间分片的新的上限值的常量表达式 | 必须是带引号的字符串或文本值。对于按列表分片,对于同一对象的分片的表达式列表,每个值必须唯一。 | 常量表达式 |
dbspace | 存储 new 分片的 Dbspace | 在执行时必须存在。所有的 dbspace 必须有相同的页大小。 | 标识符 |
dbspace _fun | 返回 dbspace 名称的 UDF 名称 | 当数据库服务器调用 URD 为新的分片分配存储时,用户定义函数和返回的 dbspace 必须存在。 | CREATE FUNCTION 语句 |
expression | 已修改的表达式 | 仅可以指定当前表中的列,以及单独一行中的数据。 | 条件; 表达式 |
new_dbspace | 存储系统生成的范围区间分片的 Dbspace | 在执行时必须存在。所有的 dbspace 必须有相同的页大小。 | 标识符 |
new | 您在此处为已修改的分片声明的 名称 | 在分片列表中分片名称必须唯一。 如果表和它的索引使用相同的范围区间或表分片存储策略,那么每个索引分片必须具有同对应表分片相同的名称。 | 标识符 |
old | 现有分片的名称 | 在分片表中必须存在。对于列表或范围区间分片,PARTITION 关键字必须在此名称之前。 | 标识符 |
range _expr | 范围表达式。定义存储在分片中的分片键的上限。 | 必须是恒定文字表达式,其与分片键表达式的数据类型兼容的数字、DATETIME 或 DATE 数据类型。另见范围区间分片的 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 表达式是无效的。
ALTER FRAGMENT ON TABLE cust_acct MODIFY dbsp1 TO acct_num < 65 IN dbsp1;
对于分片列表策略,如果新的列表表达式与同一表中或索引中的其他分片的现有列表表达式重叠,那么 ALTER FRAGMENT MODIFY 失败并发送错误。
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 选项。