暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

表空间可用300G,但是无法resize 数据文件释放空间至磁盘组

原创 问题归档 2019-03-20
648

问题描述

由于磁盘组冗余度不符合安全要求,对各表空间(Bigfile)进行清理后尝试做数据文件的resize操作,过程如下:

1、新建表空间,作为数据中转用

2、MOVE大部分表(90%)至其新建表空间后MOVE回原有表空间,从而减少数据库碎片

3、收缩对应的数据文件

在MOVE回原有表空间后重建相关索引,统计发现可用空间提高40G左右,有效的减少了碎片,但根据以下脚本发现无法resize出可用的几百g空间至磁盘组:

SELECT
a.file_id,
a.file_name
file_name,
CEIL((NVL(hwm,1)*blksize)/1024/1024)smallest,
CEIL(blocks*blksize/1024/1024)currsize,
CEIL(blocks*blksize/1024/1024)-CEIL((NVL(hwm,1)*blksize)/1024/1024)savings,
'alter database datafile '''||file_name||''' resize '||CEIL((NVL(hwm,1)*blksize)/1024/1024)||'m;'cmd
FROM
DBA_DATA_FILES a,
(SELECT file_id,MAX(block_id+blocks-1)hwm FROM DBA_EXTENTS GROUP BY file_id) b,
(SELECT TO_NUMBER(value) blksize FROM V$PARAMETER WHERE name='db_block_size')
WHERE
a.file_id = b.file_id(+)

专家解答

实际上按照你的操作思路,可以move 100%的表都去另外一个表空间,然后直接drop掉原有表空间就可以了。

计算出来脚本是一点空间都没有能收缩,刚查了发现没MOVE表的EXTENTS已经扩展到了数据文件的边缘,需要MOVE 所有表后才能resize对象的可用空间。

最后修改时间:2019-04-14 10:16:44
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论