暂无图片
分享
David008
2019-03-19
表空间可用300G,但是无法resize 数据文件释放空间至磁盘组,请问是否为脚本或是数据库存在什么问题

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


收藏
分享
3条回答
默认
最新
Kamus

能否贴出脚本的运行结果,和你根据脚本给出的“alter database”命令的执行结果。


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


暂无图片 评论
暂无图片 有用 0
David008

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

暂无图片 评论
暂无图片 有用 0
David008
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏