删除分区

你可以从范围、间隔、列表或者复合[范围|列表]分区表中删除分区。对于间隔分区表而言,你只能删除范围分区或者那些已经物化的间隔分区。对于哈希分区表或者复合哈希分区表的哈希子分区而言,你必须使用融合操作来代替。

你不能从引用分区表中删除一个分区。相反,对父表的删除操作会级连到所有子表。

删除表分区

使用一下语句来删除一个表分区或者子分区:

ALTER TABLE ... DROP PARTITION,用来删除一个表分区

ALTER TABLE ... DROP SUBPARTITION,用来删除一个复合[范围|列表]分区表的一个子分区

为了保存分区里的数据,可以使用合并分区语句来代替删除分区语句。

如果该表定义有本地索引,那么上述语句将会从本地索引中删除对应的分区或子分区。所有的全局索引,或者全局分区索引的所有分区都将被标识为UNUSABLE,除非符合下面两个条件之一:

你指定了UPDATE INDEXES子句(不能用来指定索引组织表,可以使用UPDATE GLOBAL INDEXES来代替)

删除的分区或者子分区为空

注意:

如果一个表只包含一个分区,你不能删除该分区。相反,你必须删除这个表。

在间隔分区表或者间隔复合分区表的范围分区部分,你不能删除最高的范围分区。

下面的部分包含了删除表分区的一些场景。

从一个包含数据和全局索引的表中删除一个分区

如果分区包含数据并且表上定义有一个或多个全局索引,那么可以使用下面任一方法来删除表分区。

方法一

在ALTER TABLE ... DROP PARTITION语句执行期间,保持全局索引不变。然后,你必须重建全部全局索引(无论是否分区),因为这个索引(或者索引分区)已经被标识为UNUSABLE。下面的语句提供了一个示例,首先从sales表删除分区dec98,然后重建该表的全局索引。

ALTER TABLE sales DROP PARTITION dec98;

ALTER INDEX sales_area_ix REBUILD;

如果索引sales_area_ix是一个范围分区全局索引,那么索引的全部分区都需要重建。并且,我们不可能在一条语句中重建索引的所有分区。你必须针对索引的每一个分区分别执行REBUILD语句。下面的语句分别重建了索引分区jan99_ix, feb99_ix, mar99_ix, ..., dec99_ix。

ALTER INDEX sales_area_ix REBUILD PARTITION jan99_ix;

ALTER INDEX sales_area_ix REBUILD PARTITION feb99_ix;

ALTER INDEX sales_area_ix REBUILD PARTITION mar99_ix;

...

ALTER INDEX sales_area_ix REBUILD PARTITION dec99_ix;

该方法最适用于被删除分区包含总数据很大比例的大表。

方法二

在执行ALTER TABLE ... DROP PARTITION之前,执行DELETE语句来删除分区的所有数据行。DELETE语句更新全局索引。

例如,要删除第一个分区,执行以下语句:

DELETE FROM sales partition (dec98);

ALTER TABLE sales DROP PARTITION dec98;

该方法最适用于小表,或者被删除分区数据占总数据很小比例的大表。

方法三

在执行ALTER TABLE... DROP PARTITION语句时指定UPDATE INDEXES语句。这样做的话,在删除分区的同时也会更新全局索引。

ALTER TABLE sales DROP PARTITION dec98

UPDATE INDEXES;

从一个包含数据和引用完整性约束的表中删除一个分区

如果该表包含引用完整性约束,并且一个分区包含数据,选择下面一种方法来删除该分区。该表只有一个本地索引,因此不需要重建任何索引。

方法一

如果表中不含引用被删除分区中数据的数据,那么你可以禁用引用表的完整性约束,执行ALTER TABLE ... DROP PARTITION语句,然后在重新启用完整性约束。

该方法最适用于被删除分区包含总数据很大比例的大表。如果表中含有引用被删除分区中数据的数据,那么必须确保删除这些数据,这样你就可以重新启用引用完整性约束。

方法二

如果引用表中有数据,那么在你执行ALTER TABLE ... DROP PARTITION语句之前,你可以执行DELETE语句来删除分区的所有数据。DELETE语句会强制引用完整性约束,也会激发触发器并生成redo和undo日志。如果你创建约束时包含ON DELETE CASCADE选项,那么删除操作也会成功删除引用表的所有行。

DELETE FROM sales partition (dec94);

ALTER TABLE sales DROP PARTITION dec94;

该方法最适用于小表,或者被删除分区数据占总数据很小比例的大表。

删除间隔分区

你可以删除一个间隔分区表中的间隔分区。该操作只会删除分区的数据,分区的定义会被保留。如果有数据插入到刚刚被删除的分区,那么数据库将会再次创建一个间隔分区。

你也可以删除一个间隔分区表中的范围分区。在一个间隔分区表中删除一个范围分区,要遵守在一个范围分区表中删除一个范围分区的规则。如果你要删除范围分区靠中间的分区,那么下一分区的下边界将会移动到你刚刚删除的那个分区的下边界。你不能删除一个间隔分区表中范围分区部分的最高范围分区。

下面的例子删除了sales表的2007年九月的间隔分区。由于该标只有本地索引,没有索引失效。

ALTER TABLE sales DROP PARTITION FOR(TO_DATE('01-SEP-2007','dd-MON-yyyy'));

删除索引分区

你不能显式地删除一个本地索引的一个分区。相反,只有你删除基表的一个分区时相应的本地索引分区会被删除。

如果一个全局分区索引为空,那么你可以通过执行ALTER INDEX ... DROP PARTITION语句显式地删除索引分区。但是,如果一个全局索引分区不为空,那么删除这个分区将会导致下一个最高分区被标识为UNUSABLE。例如,你要删除索引分区P1,P2时下一个最高分区。你必须执行以下语句:

ALTER INDEX npr DROP PARTITION P1;

ALTER INDEX npr REBUILD PARTITION P2;

注意:

在一个全局索引中,你不能删除最高分区。

oracle删除分区空间,Oracle 11g维护分区(三)——Dropping Partitions相关推荐

  1. oracle删除表空间中的表,ORACLE删除表空间中的所有表

    ORACLE删除表空间中的所有表,如果是非sysdbA连接用如下sql语句 declare vsql varchar2(200); cursor c1 is select 'drop table '| ...

  2. oracle not empty,oracle 删除表空间错误 ORA-01549: tablespace not empty, use INCLUDING CONTENTS option...

    oracle 删除表空间错误 ORA-01549: tablespace not empty, use INCLUDING CONTENTS option 2020-05-21 15:58:04 删除 ...

  3. oracle删除表空间

    oracle删除表空间,一般是将表空间及其对应的数据文件一并删除,有时为了避免误删数据,可以先将表空间删除,数据文件保留一段时间,确认无误在进行删除. 1.删除非空表空间,包含物理文件 drop ta ...

  4. oracle 删除表空间(tablespace)及数据文件的方法

    – 创建表空间; Create tablespace xihu datafile 'd:\oracleDB\xihu.dbf' Size 100M AutoExtend on Next 10M sel ...

  5. oracle创建和删除表空间,oracle 表空间创建和删除

    oracle数据库:数据库对象以及表数据都存储在表空间中,创建用户时可以指定对应的表空间.这样用户可以在各自的表空间中操作数据,互不干扰. 1. 表空间创建 若不清楚表空间对应文件的路径,可以登录系统 ...

  6. oracle 清理索引空间,Oracle删除索引规范

    1.背景概述 近期应用升级上线过程中,存在删除业务表索引的变更操作,且因删除索引导致次日业务高峰时期,数据库响应缓慢的情况,经定位是缺失索引导致.与用户沟通,虽然变更中删除索引的需求很少,但也存在此类 ...

  7. oracle级联删除表空间,Oracle表的创建.表空间创建删除,导入导出等

    创建表空间; 先在E盘建立oradate再在里面建一个temp, 再打开命令行cmd在写入sqlplus再写入sys/oracle@orcl as sysdba再写入 create tablespac ...

  8. shell脚本执行oracle删除表,shell脚本操作oracle删除表空间、创建表空间、删除用户...

    oracle下表空间的导出,用户的删除,表空间删除,用户新建,表空间新建,数据导入的shell 使用非oracle用户执行该脚本 参数说名 $1:base表空间的用户名 $2:同步表空间的用户名 使用 ...

  9. Oracle删除表空间导致报错无法登录解决

    用sqlplus控制台处理误删表空间而导致不能登陆成功的解决办法: sqlplus / as sysdba       #以dba身份登陆数据库 shutdown immediate;      #关 ...

最新文章

  1. java迭代器在哪个包里面,java.util.LinkedList.listIterator()方法实例
  2. html怎么样取jsp中的路径,jsp中获得路径的两种方法和获得url路径的方法(推荐)
  3. nginx+keepalived高可用及双主模式
  4. 解决ubuntu(16.04版本)和windows电脑之间无法复制粘贴问题
  5. 微软承认iPad牛逼,正计划为其定做Office?
  6. gibboncode导入.stl格式模型,进行网格划分
  7. 2微信小程序的UI设计
  8. vbs实现软件自动登录(以谷歌浏览器打开网站并登陆为例)
  9. 机器人编程语言有哪些? 这5大编程语言的优缺点你都了解?
  10. C# word 操作进阶-05-复制表格[转载]
  11. git HEAD切换
  12. 图片分割和图片合成(大图切割成小图,python代码)
  13. 签名验签服务器的作用,卫士通签名验证服务器
  14. matlab两张图片合成一张_如何将多幅图合并在一起变成一张大图
  15. sketch html尺寸,为何sketch预置画布尺寸比真实分辨率小?
  16. 全球5G发展呈现九大趋势。
  17. STM32通过I2C接口采集温湿度
  18. python生成热图_用Python生成热图
  19. 8086逻辑移位指令SHL和SHR
  20. 创意改变世界 盘点50个最伟大的游戏创意

热门文章

  1. Qt for Mac 设置软件开机自启动
  2. 泛函分析——赋范线性空间定义的概念
  3. 一文搞定JS事件基础与进阶
  4. win10光驱位连接计算机,windows10不能识别光驱位硬盘
  5. python里面两个大于号_【课堂笔记】Python常用的数值类型有哪些?
  6. 捕获计算机屏幕++方法,如何在Windows 10计算机上录制屏幕以及如何捕获计算机的音频...
  7. matlab hsv提取s_Matlab进阶教程 | 基于不规则已知点插值
  8. adb push命令传文件到手机_手机之间传文件,蓝牙太慢,QQ要流量,推荐快牙
  9. 数据结构与算法 / 总章
  10. cocos2d js调用java_【cocos2d-js官方文档】二十四、如何在android平台上使用js直接调用Java方法...