天萃荷净
oracle研究中心案例分析:运维DBA反映Oracle数据库表空间使用较大,而实际使用数据较小。收缩时ORA-03297错误的解决办法思路。
最近导一个空库到数据库后,发现占用的表空间非常大,执行表收缩(SHRINK SPACE CASCADE)后,发现实际占用的空间不到1%。
但是收缩表空间大小提示错误
ALTER DATABASE DATAFILE 'D:\ora_tablespace\GCOMM2.dbf' RESIZE 5000M;
提示:ORA-03297: file contains used data beyond requested RESIZE value
原因1:压缩表空间大小,最小必须是该表空间目前最大块段的大小
原因2:表的初始大小分配的太大
一、征对原因1,可以采用移动表空间的方法来减小block_id
--找出目前GCOMM2表空间最大的block_id
SELECT MAX(block_id)
FROM dba_extents
WHERE tablespace_name = 'GCOMM2';
MAX(BLOCK_ID)
-------------
994816
--计算目前最大块的段所占用的空间(该数据库的block大小是8092)
SQL> show parameter db_block_size ;
NAME TYPE VALUE
------------------------------------ ----------- --------------