Oracle 删除表分区

您所在的位置:网站首页 oracle删除索引释放空间 Oracle 删除表分区

Oracle 删除表分区

2024-06-28 19:32| 来源: 网络整理| 查看: 265

删除表分区(drop partition) 删除表分区包含两种操作,分别是: ? 删除分区:alter table [tbname] drop partition [ptname] UPDATE GLOBAL INDEXES ;

? 删除子分区:alter table [tbname] drop subpartition [ptname] UPDATE GLOBAL INDEXES; 除hash分区和hash子分区外,其它的分区格式都可以支持这项操作。 例如,删除分区: alter table t_partition_list drop partition t_list_p2 UPDATE GLOBAL INDEXES;

drop partition时,该分区内存储的数据也将同时删除

drop partition就是清除分区及其数据和索引truncated 就是先清除数据和索引但分区还在

由于是ddl操作,这种删除也会是非常迅速的,因此如果你确认某个分区的数据都要被删除,使用drop partition会比delete更加高效。如果你的本意是希望删除掉指定的分区但保留数据,你应该使用merge partition,后面也会讲到。 同样,如果你在执行该语句时没有指定update indexes子句,也会导致glocal索引的失效,至于local索引嘛,删除分区时对应的索引分区会被同时删除,但其它分区的local索引不会受到影响。

Truncate分区的SQLALTER TABLE table_name TRUNCATE PARTITION p1 DROP STORAGE UPDATE GLOBAL INDEXES;Drop分区的SQLALTER TABLE table_name DROP PARTITION p1 UPDATE GLOBAL INDEXES;

删除分区对应的表空间和数据文件的两种方法1、这种方式比较安全,一旦表空间非空,drop就会报错,drop成功后再在OS上rmDrop tablespace ESBLOG201607;rm -f /u01/app/oracle/oradata/payroll/ESBLOG201607.dbf2、如果有DATAGUARD,建议主库使用这种方式Drop tablespace ESBLOG201607 INCLUDING CONTENTS and DATAFILES;

当指定INCLUDING CONTENTS时,AND DATAFILES子句允许您指示数据库删除关联的操作系统文件。 每个操作系统文件被删除时,Oracle数据库将向警报日志写入一条消息。 OMF不需要此子句,因为即使没有指定AND DATAFILES也会从系统中删除该文件。

如果要截断的分区或子分区包含数据,则必须首先禁用表上的任何引用完整性约束。 或者,您可以删除行,然后截断分区。

如果表包含任何LOB列,则此分区的LOB数据和LOB索引段也将被截断。 如果表是复合分区的,则分区的子分区的LOB数据和LOB索引段将被截断。

如果表包含任何均分的嵌套表,那么除非相应的嵌套表分区为空,否则不能截断父分区。

如果域索引在表上定义,则索引不能被标记为IN_PROGRESS或FAILED,并且与表分区相对应的索引分区被截断不能被标记为IN_PROGRESS。

对于截断的每个分区或子分区,Oracle数据库还会截断相应的local索引分区和子分区。 如果这些索引分区或子分区标记为UNUSABLE,则数据库将截断它们,并将UNUSABLE标记重置为VALID。

您可以使用update_global_index_clause或update_all_indexes_clause在此操作期间更新表上的全局索引。 如果您使用这些子句之一指定parallel_clause,则数据库会并行化索引更新,而不是截断操作。

DROP存储指定DROP STORAGE可以从删除的行中释放所有空间,除了由MINEXTENTS参数分配的空间。 该空间随后可以被表空间中的其他对象使用。

DROP所有存储指定DROP ALL STORAGE以从已删除的行中释放所有空间,包括由MINEXTENTS参数分配的空间。 分区或子分区的所有段以及其依赖对象的所有段将被释放。

drop_table_partition子句从分区表中删除由partition_extended_name标识的分区以及该分区中的数据。 如果要删除分区但将其数据保留在表中,则必须将分区合并到相邻分区之一中。

如果表具有LOB列,则Oracle数据库还会丢弃与分区对应的LOB数据和LOB索引分区以及任何子分区。

如果表具有等分嵌套表列,则Oracle数据库还会删除与要删除的表分区相对应的嵌套表分区。

如果表是索引组织的,并在其上定义了一个映射表,那么数据库也会丢弃相应的映射表分区。

即使Oracle数据库标记为UNUSABLE,Oracle数据库也会删除对应于已删除分区的本地索引分区和子分区。

您可以使用update_index_clauses在此操作期间更新表上的索引。 如果使用update_index_clauses指定parallel_clause,则数据库会并行化索引更新,而不是删除操作。

如果删除范围分区,然后插入属于删除分区的行,则数据库将该行存储在下一个较高分区中。 但是,如果该分区是最高分区,则插入将失败,因为由删除的分区表示的值的范围对于表不再有效。

删除表分区的限制删除表分区受以下限制:您不能删除散列分区表的分区。 而是使用coalesce_table_partition子句。如果表仅包含一个分区,则不能删除该分区。 而是删除表。如果您使用update_index_clauses更新全局索引,则可以仅指定UPDATE INDEXES关键字,但不能指定子条款。

使用此子句仅更新表上的全局索引。 Oracle数据库标记UNUSABLE表上的所有本地索引。

UPDATE GLOBAL INDEXES指定UPDATE GLOBAL INDEXES来更新表上定义的全局索引。

UPDATE GLOBAL INDEXES 的限制如果全局索引是在LOB列上定义的全局域索引,则Oracle数据库会标记域索引UNUSABLE而不是更新它。

INVALIDATE GLOBAL INDEXES指定INVALIDATE GLOBAL INDEXES以使表上定义的全局索引无效。

如果既不指定INVALIDATE GLOBAL INDEXES也不指定UPDATE GLOBAL INDEXES ,则Oracle数据库会使全局索引失效。

使用此子句从范围,列表或哈希复合分区表中删除范围或列表子分区。 Oracle数据库删除丢弃的子分区中的任何行。

Oracle数据库删除任何local索引的相应子分区。 其他索引子分区不受影响。 任何全局索引都标记为UNUSABLE,除非您指定update_global_index_clause或update_all_indexes_clause。

删除表子分区的限制删除表子分区受以下限制:您不能删除哈希子分区。 而是使用MODIFY PARTITION ... COALESCE SUBPARTITION语法。如果一个分区只包含一个子分区,则不能删除该子分区。 而是使用drop_table_partition子句如果更新全局索引,则不能指定update_all_indexes_clause的可选子条款。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3