Oracle数据库中当某些大数据表不再需要的时候,我们可以通过以下方式来进行清理:
DROP TABLE TBL_TEST PURGE;
但是对应表空间(tablespace)中的磁盘空间并没有得到释放,因此我们需要进行以下操作:
1. 首先我们需要了解当前对应表空间的最小文件尺寸,可以通过以下脚本获得
SELECT tablespace_name, file_name, file_size, hwm, file_size - hwm can_save FROM ( SELECT /*+ RULE */ ddf.tablespace_name, ddf.file_name file_name, ddf.bytes / 1048576 file_size, (ebf.maximum + de.blocks - 1) * dbs.db_block_size / 1048576 hwm FROM dba_data_files ddf, ( SELECT file_id, MAX (block_id) maximum FROM dba_extents GROUP BY file_id) ebf, dba_extents de, (SELECT VALUE db_block_size FROM v$parameter WHERE name = 'db_block_size') dbs WHERE ddf.file_id = ebf.file_id AND de.file_id = ebf.file_id AND de.block_id = ebf.maximum ORDER BY 1, 2);
结果如下,我们可以看到其中MRO表空间还有98M磁盘空间可以释放:
2. 我们通过以下脚本对表空间操作实现磁盘空间释放,结果如下:
alter database datafile 'C:\ORACLE\ORADATA\MROONE\MRO03.DBF' resize 120m;