ALTER FRAGMENT 语句

可以使用 ALTER FRAGMENT 语句更改现有表或索引的分布策略或存储位置。该语句是 SQL ANSI/ISO 标准的扩展。

语法

元素 描述 限制 语法
surviving _index 用于修改分布或存储的索引 当该语句执行时必须存在 标识符
surviving _table 用于修改分布或存储的表 必须存在。请参阅 对 ALTER FRAGMENT 语句的限制 标识符

用法

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 环境选项 。)

1 请参阅 ATTACH 子句
2 请参阅 DETACH 子句
3 请参阅 INIT 子句
4 请参阅 ADD 子句
5 请参阅 DROP 子句
6 请参阅 MODIFY 子句
7 仅在通过间隔分片的表上随同 ATTACH、DETACH 或 MODIFY