首页 > 其他 > 详细

数据文件resize回收空间

时间:2019-03-18 23:46:11      阅读:230      评论:0      收藏:0      [点我收藏+]

场景说明:

客户 ASM磁盘组,data磁盘组空闲空间90G,空间不足,因此强烈建议回收空间

空间回收方案:

1.数据文件resize,回收部分可用性空间(好处就是能够将ASM磁盘组free大小增加);

2.大的无用对象清理,释放空闲空间(好处就是释放空间所在的表空间,新增数据能够使用删除的大对象原空间,而无需对表空间进行扩容);

 

 

1.回收数据文件,对数据文件进行resize

SQL>select a.file#,a.name,c.tablespace_name,round(a.bytes/1024/1024) CurrentMB,ceil(HWM*a.block_size)/1024/1024 ResizeTo,
(a.bytes-HWM*a.block_size)/1024/1024 ReleaseMB,alter database datafile ||a.FILE#|| resize ||round(ceil(HWM*a.block_size)/1024/1024+5)|| M; ResizeCmd
 from v$datafile a,(SELECT file_id,MAX(block_id+blocks-1) HWM FROM DBA_EXTENTS GROUP BY file_id) b,dba_data_files c where a.file#=b.file_id(+)
 And (a.bytes-HWM*a.block_size)>0 and a.FILE#=c.file_id and c.tablespace_name not in(SYSTEM,SYSAUX) and c.tablespace_name not like%UNDO% order by 6 desc;

SQL> select group_number,name,total_mb/1024 TOTAL_GB,free_mb/1024 FREE_GB,free_mb/total_mb*100 free_percent,state,TYPE,(case when free_mb/total_mb*100 < 15 then ‘*‘ else ‘‘ end ) care from v$ASM_DISKGROUP;


SQL思路,查询每个数据文件中max_block_id *表空间的block_size,进行计算+5m(保守),是数据文件最大的大小,进行resize回收,排除undo,system,sysaux,temp表空间

 

2.大的无用对象清理,释放空闲空间(好处就是释放空间所在的表空间,新增数据能够使用删除的大对象原空间,而无需对表空间进行扩容);

查询数据库中大于2G的对象并列举出来, or ,将数据库中指定的users表空间,top 50对象列举出来
SQL> select * from (select owner,segment_name,segment_type,tablespace_name,round(sum(bytes)/1024/1024/1024,2) "Gbytes" 

from dba_segments where bytes>1024*1024*50 group by owner,segment_name,segment_type,tablespace_name) C1 where C1."Gbytes">2;

or
SQL> select rownum,C1.* from (select owner,segment_name,segment_type,tablespace_name,round(sum(bytes)/1024/1024/1024,2) "Gbytes"
from dba_segments where bytes>1024*1024*50 and tablespace_name=‘USERS‘ group by owner,segment_name,segment_type,tablespace_name order by 4,5) C1 where rownum<50;

 

数据文件resize回收空间

原文:https://www.cnblogs.com/lvcha001/p/10555995.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!