1. 程式人生 > >數據文件resize回收空間

數據文件resize回收空間

round lse lte current 空間 database temp 空閑 emp

場景說明:

客戶 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回收空間