有时数据库服务器磁盘空间在不知不觉中已经不够用了,当数据库无法使用报错时,需要紧急恢复,再进行转移或磁盘扩容,这时可以临时释放一定磁盘空间,保障数据库正常运行
计算datafile可以resize收缩的空间.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| col name for a40 col resizecmd for a80 select a.file ceil(HWM * a.block_size)/1024/1024 ResizeTo, (a.bytes - HWM * a.block_size)/1024/1024 ReleaseMB, 'alter database datafile '''||a.name||''' resize '|| ceil(HWM * a.block_size/1024/1024) || 'M;' ResizeCMD from v$datafile a, (select file_id,max(block_id+blocks-1) HWM from dba_extents group by file_id) b where a.file and (a.bytes - HWM *block_size)>0 order by 5
|
如果只是想对某个表个间的datafile resize,可采用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| select a.file ceil(HWM * a.block_size)/1024/1024 ResizeTo, (a.bytes - HWM * a.block_size)/1024/1024 ReleaseMB, 'alter database datafile '''||a.name||''' resize '|| ceil(HWM * a.block_size/1024/1024) || 'M;' ResizeCMD from v$datafile a, (select file_id,max(block_id+blocks-1) HWM from dba_extents where file_id in (select b.file where a.ts group by file_id) b where a.file and (a.bytes - HWM *block_size)>0 order by 5
|
计划tempfile可以resize的空间.on apply that have only one tempfile
1 2 3 4
| select 'alter database tempfile '''||a.name ||''' reize '||b.siz||'M;' from v$tempfile a, (select tmsize.maxblk*bk.value/1024/1024 siz from (select nvl(max(segblk#),128) maxblk from v$sort_usage) tmsize, (select value From v$parameter where name = 'db_block_size') bk) b
|