WebClerk

每个人其实都行走在蓝天之下,如果你没有感觉到,那是因为你没有抬头向上看,而不是它不存在。

导航

Oracle 收缩数据文件

Posted on 2014-04-24 19:29  WebClerk  阅读(1547)  评论(0编辑  收藏  举报

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

image

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

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

image