可以通过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。