0

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

问题归档 2019-03-20
126
摘要:由于磁盘组冗余度不符合安全要求,对各表空间(Bigfile)进行清理后尝试做数据文件的resize操作,过程如下:1、新建表空间,作为数据...

问题描述

由于磁盘组冗余度不符合安全要求,对各表空间(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对象的可用空间。

「喜欢文章,快来给作者赞赏墨值吧」

评论

0
0
最新发布
暂无内容,敬请期待...
数据库资讯
最新 热门 更多
本月热门
近期活动
全部
暂无活动,敬请期待...
相关课程
全部
暂无课程,敬请期待...