查询可直接收缩表空间数据文件
这里查看的是可以直接收缩的数据文件大小,比如最开始初始化的数据文件为32G,在数据文件高水位以下的为20G,那么可直接回收的为12G。
select a.file#,a.name,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.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# = b.file_id(+)
and (a.bytes - HWM *block_size)>0;
直接收缩数据文件
alter database datafile '/oracle/oradata/bi/data01.dbf' resize 1548M;
1.查看大于10G的数据文件
select file_name,file_id,tablespace_name,(bytes/1024/1024/1024) file_size_gb from dba_data_files where (bytes/1024/1024/1024) >10 order by file_id;
2.查看大于10G的数据文件对应的数据块信息
select file_id,max(block_id+blocks-1) HWM,block_id
from dba_extents
where file_id =14
group by file_id,block_id
order by hwm desc ;
3.查看大表对应的数据块信息
##查看大表
select file_name,file_id,tablespace_name,(bytes/1024/1024/1024) file_size_gb from dba_data_files where (bytes/1024/1024/1024) >10 order by file_id;
##查看大表对应的块
select owner,segment_name,file_id,block_id,blocks from dba_extents where segment_name='TABLE_NAME';
4.降低表的高水位
alter table table_name move;
alter index idx_name rebuild;
5.查看数据文件对应的最大的block_id
SELECT MAX(block_id)
FROM dba_extents
WHERE tablespace_name = 'TABLESPACE_NAME';
6.执行数据文件收缩
(block_id+blocks-1)数据文件的HWM
alter database datafile '/oracle/oradata/bi/data01.dbf' resize xxxM;