DETACH 子句

使用 ALTER FRAGMENT ON TABLE 语句的 DETACH 子句以将表分片从分布方案拆离,并将这些内容放入新的未分片表中。

此子句在 ALTER FRAGMENT ON INDEX 语句中无效。

有关分布方案的说明,请参阅 FRAGMENT BY 子句 。
DETACH 子句
元素 描述 限制 语法
fragment 包含要拆离的表分片的分片或 dbspace 的名称。 执行时必须存在。 对于列表或范围区间分片, PARTITION 关键字必须产生 fragment。 标识符
new_table 执行 ALTER FRAGMENT 语句后产生的未分片表的名称。 执行前必须存在 标识符

用法

执行 DETACH 子句而生成的新表不会从最初的表继承任何索引或约束。只保留数据值。

类似地,新表不从最初的表继承任何特权。而是具有任何新表都有的缺省特权。关于缺省表级别特权的进一步信息,请参阅 表级权限 中的 GRANT 语句。

DETACH 子句无法应用到以下具有任一属性的表中:
  • 定义了 ROWID 列
  • 定义了一列或队列为参考约束的主键
  • 表中定义了 Enterprise Replication 复制
  • 具有拆离索引(即,存储分布方案的索引与表的分片策略不同)

如果省略 PARTITION 关键字,那么分片的名称就是存储分片的 dbspace 的名称。

在以下示例中,系统生成的范围区间分片 sys_pt1 从表 T1 拆离并放置到新的未分片表 detacht1 中:
ALTER FRAGMENT ON TABLE T1 DETACH PARTITION sys_pt1 detacht1;  
下一示例为从表 T2 拆离了列表分片 part2 并将其数据放置到新的未分片表 detacht2 中:
ALTER FRAGMENT ON TABLE T2 DETACH PARTITION part2 detacht2;

DETACH 操作后的分布统计信息

某些 ALTER FRAGMENT . . . DETACH 操作可能导致数据库服务器更新初始表的索引结构。当在这种情况下重建索引时,数据库服务器也将重新计算相关联列的分布方案,并且当其为拆离分片的表设置查询计划时这些统计信息可用于查询优化器:
  • 对于在 ALTER FRAGMENT ... DETACH 自动重建 B-tree 索引的索引的列(或列的集合),重新计算的列分布统计信息相当于在 HIGH 模式下 UPDATE STATISTICS 语句创建的分布。
  • 如果重建索引不是 B-tree 索引,对应自动重新计算的分布统计信息由 UPDATE STATISTIC 语句在 LOW 模式下创建。

如果启用更新列分布统计信息的自动模式,而且来自正在拆离分片的表具有分片级别分布统计信息,那么数据库服务器使用拆离的分片的统计信息作为新表的分布统计信息。数据库服务器也合并驻留分片数据分布统计信息以计算初始表的新表分布统计信息,并会将结果存储在 sysdistrib 系统目录表中。新表的分布统计信息的注册和旧表的表分布统计的重新计算都在后台运行。

有关在现有表中创建索引或约束时自动生成统计分布的语句的其他信息,请参阅自动计算分布统计信息中的 CREATE INDEX 语句的描述。