1 查询需要收缩的数据文件 file_id
select file_id,file_name,tablespace_name,bytes/1024/1024/1024 GB from dba_data_files order by 4;
2 查询该文件内最大块号
select max(block_id) from dba_extents where file_id = &file_id;
3 计算该表空间目前实际占用的空间(不是物理文件的大小)
显示每个数据块的大小。语句如下:
show parameter db_block_size;
结果为8192,就是8K。
然后计算所有数据块占用的物理空间
select <block_id>*8/1024 MB from dual;
4 上述计算结果,表明该数据文件实际使用情况,resize 操作只能缩小至该值
alter database datafile <file_id> resize M;
最大了,不能resize了。。。