可以使用 ALTER FRAGMENT 语句更改现有表或索引的分布策略或存储位置。该语句是 SQL ANSI/ISO 标准的扩展。
语法
用法
ALTER FRAGMENT 语句仅适用于位于当前站点的表分片或索引分片。不会存储或更新任何远程 信息。
要更改一个表的分片存储策略,您必须具有 Alter 或 DBA 特权。要更改一个索引的分段存储策 略,您必须具有 Index 或 DBA 特权。
Attention: 此语句可能导致索引被删除或重建。执行更改操作之前,请仔细阅读 GBase 8s 性能 指南 中的相应章节以查看影响和策略。
ALTER FRAGMENT 语句的子句支持以下任务。
子句 作用 ATTACH 将两个或多个具有相同模式的表组合到一个分片表中 DETACH 将一个表分片从分片存储策略中拆离,并将其置于一个新表中 INIT 提供以下选项:
• 定义并初始化一个表上的分片存储策略
• 更改对分片表达式求值的顺序
• 更改表或索引的分片存储策略
• 更改现有表的存储位置
• 将数据从现有的表分片移到另一个新的分片表中
• 更改数据库给表或索引生成的分片存储位置
• 更改表或索引的分片键或分片表达式 ADD 将另一个分片添加到一个现有分片存储列表
DROP 从一个分片存储列表删除一个现有分片
移除一个或多个创建内部分片的 dbspace 列表中的 dbspaces MODIFY 更改现有区间、列表或基于表达式的分片表达
将现有的分片移动到不同的 dbspace 中去
用新的列表替换创建区间分片的 dbspace 当前列表
启用或禁用自动创建区间分片
使用 CREATE TABLE 语句或 ALTER FRAGMENT 语句的 INIT 子句来创建分片表。
在 onspaces 实用程序成功重命名 dbspace 后,只有新的名称能够引用重命名后的 dbspace。然 而,表或索引的现有分片存储策略是由数据库服务器自动更新的,以使用新的 dbspace 名称替换旧 的名称。您不需要采取任何额外的操作更新使用旧的 dbspace 名称定义的分布策略或存储位置,但 是如果您要在一个 ALTER FRAGMENT 或 ALTER TABLE 语句中引用该 dbspace ,您必须使用 新的名称。
如果您忽略可选 ONLINE 关键字,ALTER FRAGMENT 操作需要在参与该操作的所有表上都放置 独占存取和独占锁。如果您启用 FORCE_DDL_EXEC 会话环境选项,那么您可以强制已打开的参 与 ALTER FRAGMENT ON TABLE 操作的表或任一已放置锁的表的其他事务退出。如果服务器无 法获得该表的独占访问和独占锁,那么服务器将会回滚已打开或表中已有锁的事务,直到满足 FORCE_DDL_EXE 选项指定的值。(有关更多信息,请参阅 FORCE_DDL_EXEC 环境选项 。)