【Oracle】datafile的resize大小确认方法


在对Oracle的表进行删除操作的时候,虽然数据被清空了,但是物理上占用的空间却没有被释放掉,这有可能使我们的DB服务器的物理存储始终在增长。

我们在删除用户,表的同时也要对datafile文件进行resize。

具体resize的大小可以通过下面的SQL语句来确认。

SELECT
    'alter database datafile '''
    || t1.file_name
    || ''' resize '
    || ceil((nvl(hwm, 1) * &&blksize) / 1024 / 1024)
    || 'M;' resize_cmd
FROM
    dba_data_files t1,
    (
        SELECT
            file_id,
            MAX(block_id + blocks - 1) hwm
        FROM
            dba_extents
        GROUP BY
            file_id
    ) t2
WHERE
    t1.file_id = t2.file_id (+)
AND
    ceil(blocks * &&blksize / 1024 / 1024) - ceil((nvl(hwm, 1) * &&blksize) / 1024 / 1024) > 0;

这里的blksize的值通常为8192

检索得到的结果例:

alter database datafile '/u01/app/oracle/oradata/db/system01.dbf' resize 800M;


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM