ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 表释放两种方法

表释放两种方法

原创 Linux操作系统 作者:byron_chenc 时间:2011-08-24 16:41:22 0 删除 编辑

最近老是遇到现场表空间不足,又不肯增加表空间的需求,

无奈只能删历史表数据了,

背景:要释放的表数据和索引不在同一个表空间。

总结了一下释放表的方法:

1、truncate(我采用的是该方法)

delete删除历史数据,
建备份表把删除后的表数据插入(备份表建在其他表空间上),

把原先truncate掉,再将备份表数据插入。


2、

alter table t_userlog enable row movement;(也可以先move到其他表空间上)
alter table t_userlog shrink space cascade;

这样操作后索引会失效,需要重建索引
脚本如下:

declare
tmp_val varchar2(200);
begin
    for rec in (select index_name from user_indexes)
    loop
        tmp_val:='alter index '||rec.index_name ||' rebuild';
        begin
            execute immediate tmp_val;
            dbms_output.put_line (tmp_val);
        exception
        when others
        then
           dbms_output.put_line ('error: ' || tmp_val || '!');
        end;
    end loop;
end;

两种都需要其他空闲的表空间。

 

其他都不是很有效的。

使用alter table ... deallocate unused 命令回收表的空间(对HWM之上的没有作用)
例如: alter table AA.TEST deallocate unused ;


使用 alter tablespace TABLESPACENAME coalesce 命令回收表空间的空间。(对HWM之上的没有作用)


3、对应truncate和drop只是把块儿标记为未使用,在resize数据文件时不会释放的。除非真正未使用的块儿。

 

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

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-06-03

  • 博文量
    1
  • 访问量
    2548