项目背景:在之前开发环境数据库管理比较乱,在表空间不足时只是添加数据文件,测试完后数据己删除,但数据库表空间所占的空间不能回收,导致数据库的存储目录使用率达到97%以上实际使用只有10%,迫切需要将不用空间进行回收.
技术背景:Oracle不提供如删除表、视图一样删除数据文件的方法,数据文件是表空间的一部分,所以不能“移走”表空间。Oracle 10G R2开始,可以采用:Alter tablespace tablespace_name drop datafile file_name;来删除一个空数据文件,并且相应的数据字典信息也会清除:
A.确认oracle版本(我是以本机(windows)查看数据库版本,测试环境为AIX操作系统,但数据库版本一致),版本满足可以直接删除数据文件
select * from v$version;
B.确认移除的数据文件
a.确定需要移去的数据文件,可以用数据文件最大扩展的大小和对象多少综合评估一下,是否将这个文件进行移除
扩展大小:
select file_id,tablespace_name,max(t.block_id)*8192/1024/1024 from dba_extents t
where tablespace_name = 'FERMATDATA'
group by file_id,tablespace_name
对象多少:
select * from dba_extents t
where t.file_id =10
<