1.清理临时表空间,释放临时表空间文件
select * from dba_temp_files --临时表空间文件路径
–为表空间TEMP01新建一个数据文件
alter tablespace TEMP01 add tempfile ‘G:/XXXXXXX/TEMP.DBF’ size 100m autoextend on ;
–删除原来的表空间文件(数据库为mount状态下)
alter tablespace TEMP01 drop tempfile ‘G:\XXXXXXX\TEMP.DBF’
alter database tempfile ‘G:\XXXXXXX\TEMP.DBF’ drop including datafiles
alter database tempfile ‘G:\XXXXXXX\TEMP.DBF’ online
2.清理表空间回收站
purge dba_recyclebin
SQL> purge dba_recyclebin; --sys用户执行清理dba_recyclebin
DBA Recyclebin purged.
然后再查看表空间占用情况,会发现那种临时BIN$WadR**8这种就清理了,表空间会释放。
3.收缩数据库表空间,释放一定的磁盘空间。将以下语句查出来的命令单独执行,收缩表空间文件大小。
select
‘ALTER DATABASE DATAFILE ‘’’ || a.file_name || ‘’’ RESIZE ’ ||
round((a.totalsize - b.freesize) + 200) || ‘M;’ as “alter datafile”
from (select a.file_name,
a.file_id,
a.tablespace_name,
a.bytes / 1024 / 1024 as totalsize
from dba_data_files a) a,
(select b.tablespace_name,
b.file_id,
sum(b.bytes / 1024 / 1024) as freesize
from dba_free_space b
group by b.tablespace_name, b.file_id) b
where a.file_id = b.file_id
and b.freesize > 100
and a.tablespace_name not like ‘UNDO%’
4、清理表数据,释放一定表空间,再收缩数据库空间大小,收缩比例很小。(如果不能整个表空间删了重建,只删表,磁盘空间不会释放太大。释放的表空间可以减缓增长数据库文件的速度)
5、对于占用空间比较大的历史库及其表空间。可以删了重建。
a、将原来历史库表清理历史数据,导出所有表dump文件(注意备份前先计算数据大小,以免有存储空间不够)。
b、删去原历史库和表空间,再新建历史库和表空间,用导出文件还原。
c、历史库建定时任务,仅保留最近半年的数据,历史数据定期清理。