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