oracle 回收表空間的資料檔案大小

abin1703發表於2016-07-21
 今天發現系統空間使用率達到100%,zabbix老是報警,沒辦法在資料庫中將歷史資料刪除了一些,但是表空間仍然沒有降低,並未回收,磁碟空間還是100%。
[oracle@node data]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             296G   89G  192G  32% /
tmpfs                  59G  228K   59G   1% /dev/shm
/dev/sda1             200M  260K  200M   1% /boot/efi
/dev/sda4             4.0T  3.8T   39G 100% /u01


解決如下:

檢視錶空間的使用情況:
select a.tablespace_name,a.bytes/1024/1024 "Sum MB",(a.bytes-b.bytes)/1024/1024 "used MB",b.bytes/1024/1024 "free MB", 
round(((a.bytes-b.bytes)/a.bytes)*100,2) "percent_used" 
from 
(select tablespace_name,sum(bytes) bytes from dba_data_files group by tablespace_name) a, 
(select tablespace_name,sum(bytes) bytes,max(bytes) largest from dba_free_space group by tablespace_name) b 
where a.tablespace_name=b.tablespace_name 
order by ((a.bytes-b.bytes)/a.bytes) desc 

回收表空間資料檔案

select   'alter database datafile '''||a.file_name||''' resize '    ||round(a.filesize - (a.filesize - c.hwmsize-100) *0.8)||'M;',   a.filesize,   c.hwmsize from  ( select file_id,file_name,round(bytes/1024/1024) filesize from dba_data_files ) a, ( select file_id,round(max(block_id)*8/1024) HWMsize from dba_extents group by file_id) c where a.file_id = c.file_id   and a.filesize - c.hwmsize > 100



執行回收reize資料檔案的sql
alter database datafile '/u01/app/oradata/orcl/etl01.dbf' resize 3549042M;


[oracle@node data]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2             296G   89G  192G  32% /
tmpfs                  59G  228K   59G   1% /dev/shm
/dev/sda1             200M  260K  200M   1% /boot/efi
/dev/sda4             4.0T  3.6T  203G  95% /u01

系統磁碟空間下降。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30345407/viewspace-2122335/,如需轉載,請註明出處,否則將追究法律責任。

相關文章