Oracle 收缩数据文件

时间:2022-04-18 09:55:43

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磁盘空间可以释放:

Oracle 收缩数据文件

2. 我们通过以下脚本对表空间操作实现磁盘空间释放,结果如下:

alter database datafile 'C:\ORACLE\ORADATA\MROONE\MRO03.DBF' resize 120m;

Oracle 收缩数据文件