使用 DROP 子句从按循环分片的分片表或索引的分片列表中除去现有分片。对于按范围区间分片的表或索引,您可以使用此子句删除一个或多个存储系统生成的区间分片的 dbspace 列表中的 dbspace 。
使用 DETACH 子句而不是 DROP 子句移除使用范围区间分片的表中的现有分片,例如滚动窗口表。
如果表是按表达式分片的,则不可以删除包含无法移动到其它分片的数据的分片。如果分布方案有 REMAINDER 选项或者如果表达式重叠,则可以删除包含数据的分片。如果表只含两个分片,则不能删除其中一个分片。
当您想要取消一个分片表的分片时,请使用 ALTER FRAGMENT 语句的 INIT 子句或 DETACH 子句。而不是 DROP 子句。
如果 fragment 在被创建或添加时未命名,那么 sbspace 的名称同时也是该分片的名称。如果该分片是系统生成的表或索引的范围区间分片,那么它的名称是 sys_pevalpos,evalpos 是系统目录中分片的 sysfragments.evalpos 项。如果一个表或索引使用相同的范围区间分片策略,那么每个系统生成的索引分片具有和该表系统生成分片的一样的标识。
当您删除一个分片时,数据库服务器尝试将被删除分片中的所有记录移到到另一个分片中。在此情况下,目标分片可能没有足够的空间容纳这些添加的记录。如果发生这种情况,请遵循 ALTER FRAGMENT 和事务日志记录 中描述的过程,增加您的可用空间,并重试 ALTER FRAGMENT 操作。
当 DROP 子句指定一个或多个 dbspaces 从范围区间分片策略中移除时,这些 dbspace 不受影响,但数据库服务器会将存储在该 dbspace 中表或索引的分片中的数据移动到其它可用 dbspace 中。(范围区间策略也将会受影响,因为它不再包含在新的系统生成分片的存储位置中的指定的 dbspace 。)
您无法使用 DROP 子句删除一个包含数据的范围区间分片。
您可以使用此子句删除包含数据的分片列表,只要余项分片接收这些数据。
如果此分片表由分片级别统计信息,那么 ALTER FRAGMENT DROP 操作也删除要被移除分片的分片级别统计分布。然而,不会重新计算表级别的统计信息。表的下一个显式或自动的 UPDATE STATISTICS 操作将会重建旧的分片级分布并从表级别分布合并,再将结果存储在系统目录中。
ALTER FRAGMENT ON INDEX cust_indx DROP dbsp2; ALTER FRAGMENT ON TABLE customer DROP dbsp1;
ALTER FRAGMENT ON TABLE T2 DROP PARTITION part4; ALTER FRAGMENT ON INDEX idx2 DROP PARTITION part4;在以上所有的示例中,PARTITION 关键字是必需的,已删除的分片的名称为 part4 。如果索引 idx2 在表 T2 中定义,且要其具有与表 T2 相同的存储分布策略,那么第二条语句不是必需的。因为当表分片列表被修改时,数据库服务器会自动修改要连接的索引的分片策略。如果这些分片不为空,那么数据库服务器将把它们的数据移动到余项分片中(如果没有余项分片存在,则会返回错误)。
ALTER FRAGMENT ON TABLE T1 DROP INTERVAL STORE IN (dbs7, dbs8); ALTER FRAGMENT ON INDEX idx1 DROP INTERVAL STORE IN (dbs7, dbs8);如果 idx1 是表 T1 中连接的索引,那么 PARTITION 关键字是必需的而第二条语句非必要:当修改表分片列表时,数据库服务器会自动修改任一已连接的索引的分片策略以匹配该表已变更的策略。如果这些分片不为空,那么数据库服务器会将来自指定 dbspace dbs7 和 dbs8 的分片移动到其它可用 dbspace 中。