客户这边有一个需求:某个业务系统的数据库数据文件占用空间过大,磁盘空间资源紧张且不允许扩容,业务已经尽可能的做了数据清理,目前DBA想对数据文件尽可能的resize到允许值以释放部分空间,我通过互联网搜索到一个SQL,原版存在些排版格式的错误,我这里实际测试验证结合实际需求,最终修正如下,下面SQL可直接执行,只需按提示输入你要查询的表空间:
col tablespace_name for a30
set lines 140
select
a.tablespace_name,
a.file_id,
ceil((nvl(b.hwm, 1) * c.value) / 1024 / 1024) "smallest(mb) - hwm",
ceil(blocks * c.value / 1024 / 1024) "currsize(mb)",
ceil(blocks * c.value / 1024 / 1024) - ceil((nvl(b.hwm, 1) * c.value) / 1024 / 1024) "savings(mb)"
from dba_data_files a,
(select file_id, max(block_id + blocks - 1) hwm from dba_extents group by file_id) b,
(select value from v$parameter where name = 'db_block_size') c
where a.file_id = b.file_id(+)
and a.status <> 'INVALID'