当前位置:首页 > oracle 删除表后清理磁盘空间

oracle 删除表后清理磁盘空间

点击次数:2344  更新日期:2020-06-06

drop

执行drop table xx 语句

drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉。这样,回收站里的表信息就可以被恢复,或彻底清除。


清除回收站里的信息

清除指定表:purge table <table_name>;

清除当前用户的回收站:purge recyclebin;

清除所有用户的回收站:purge dba_recyclebin;

不放入回收站,直接删除则是:drop table xx purge;



truncate


例如:truncate table XX

Truncate不支持回滚,并且不能truncate一个带有外键的表,如果要删除首先要取消外键,然后再删除。

truncate table 后,有可能表空间仍没有释放,可以使用如下语句:

alter table 表名称 deallocate UNUSED KEEP 0;

注意如果不加KEEP 0的话,表空间是不会释放的。


例如:

alter table F_MINUTE_TD_NET_FHO_B7 deallocate UNUSED KEEP 0;


或者:

TRUNCATE TABLE (schema)table_name DROP(REUSE) STORAGE才能释放表空间。


例如: truncate table test1 DROP STORAGE;



收缩物理文件大小


alter database datafile '/data/xxx.dbf' resize 50M;


查看表空间物理文件

SELECT tablespace_name, file_id, file_name, round(bytes / (1024 * 1024), 0) total_space FROM dba_data_files ORDER BY tablespace_name;


查看物理文件实际使用硬盘大小

select f.name, max(block_id)*8/1024/1024 from dba_extents e join v$datafile f on e.file_id=f.file# group by f.name order by name;