來源於:http://www.itpub.net/thread-513609-1-1.html
http://bbs.csdn.net/topics/330251089
http://blog.csdn.net/rznice/article/details/6107650
1、首先要得到USERS01.DBF的file_id
SELECT file_name,file_id FROM dba_data_files WHERE file_name like '%USER%';
2、統計這個數據文件有哪些段,各占多少空間,然后再考慮是drop還是truncate等處理操作。
select owner,segment_name,sum(bytes)
from dba_extents
where file_id=如上的file_id
group by owner,segment_name
order by 3 desc;
3、找到哪個用的空間多了,處理一下吧。
不論使用delete還是truncate刪除數據,ORACLE數據文件都不會自動收縮;
如果要收縮數據文件,delete不能降低HWM,delete后再alter table XXX move;
或者使用truncate后再resize數據文件試試
sql>truncate test1
sql>alter database datafile 'users01.dbf' resize 200m;
可以通過resize datafile來減小數據文件的大小。
首先,要查清楚數據文件的真實使用空間。可以通過查詢dba_extents達到這個目的。oatbs表空間使用的數據文件為E:/Oracle/PRODUCT/10.2.0/ORADATA/ORCL/OATBS.DBF
SQL> select file_name,e.file_id, sum(e.bytes)/1024/1024 as MB from dba_extents e join dba_data_files f on e.file_id=f.file_id group by file_name,e.file_id;
FILE_NAME FILE_ID MB
-------------------------------------------------------------------------------- ---------- ----------
E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/USERS01.DBF 4 3.1875
E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/OATBS.DBF 8 73.375
E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSAUX01.DBF 3 253.8125
E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/EXAMPLE01.DBF 5 77.625
E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/UNDOTBS01.DBF 2 42.8125
E:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/SYSTEM01.DBF 1 500.625
6 rows selected
可以看出OATBS.DBF實際使用空間只有73MB。resize datafile的時候不可以小過這個大小。
SQL> alter database datafile 8 resize 80m;
Database altered
SQL>
OATBS.DBF 文件由原先的100M減少為現在的80M。