ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【DROP】高效删除含有大量区(Extent)的表

【DROP】高效删除含有大量区(Extent)的表

原创 Linux操作系统 作者:secooler 时间:2011-04-20 23:54:05 0 删除 编辑
  本案例适用于那些超大型表,这一类表本身体积巨大,包含了大量的区(Extent)。对于主机CPU性能不是很强的环境,仅仅通过DROP命令是很难一次性完成删除任务,因为时间不允许。我们可以采用“分而治之”的策略高效地完成这类表的删除任务。

  这是一个CPU密集型的操作,CPU主要消耗在对区的整理上。对于主机CPU性能不是很强的环境,需要提前做好准备。

  我们可以模拟一下这种类型的表。

1.创建测试表T
sec@ora10g> create table t as select * from all_objects;

Table created.

2.初始化大量数据
使用如下简单插入语句反复向表T中插入数据。
insert into t select * from t;
commit;

3.最后的确认表T所占用区大小
sys@ora10g> select OWNER,SEGMENT_NAME,SEGMENT_TYPE,BYTES/1024/1024 MB,EXTENTS from dba_segments where SEGMENT_NAME='T';

OWNER      SEGMENT_NAME    SEGMENT_TYPE               MB    EXTENTS
---------- --------------- ------------------ ---------- ----------
SEC        T               TABLE                    1856        212

表T大小近2G,占用区212。这个例子不是很典型,最佳的实例使用了成千上万的区。

4.“分而治之”完成表T的删除
三步走。
1)使用具有REUSE STORAGE选项的TRUNCATE命令清除表数据
conn sec/sec
sys@ora10g> conn sec/sec
Connected.
sec@ora10g> truncate table t reuse storage;

Table truncated.

2)分阶段回收空间
找到合适的维护窗口分阶段完成空间的回收。
sec@ora10g> alter table t deallocate unused keep 1000m;

Table altered.

sec@ora10g> alter table t deallocate unused keep 500m;

Table altered.

sec@ora10g> alter table t deallocate unused keep 100m;

Table altered.

3)删除表
sec@ora10g> drop table t purge;

Table dropped.

5.小结
  在具有海量数据的生产环境中,对那些超大型的表的处理方法往往没有想象中的那种简单。做好知识储备,针对具体场景做出正确的选择。建议在对生产环境进行调整之前在测试环境中能够模拟一遍,这样可以极大的降低贸然行动带来的损失。

Good luck.

secooler
11.04.20

-- The End --

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-693829/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE 总监,阿里云MVP,北京大学理学硕士,恩墨学院创始人,教育专家,中国区 Cloudera 首位官方授权大数据讲师,金牌培训专家,BDA大数据联盟创始人,OCM联盟创始人,ACCUG创始人、ACOUG核心专家,Blogger。

注册时间:2008-03-16

  • 博文量
    797
  • 访问量
    8091276