1.碎片
检查表空间碎片:
select tablespace_name, count(*) chunks ,max(bytes/1024/1024) max_chunk from dba_free_space
chunks 列表示表空间中有多少可用的空闲块(每个空闲块是由一些连续的Oracle数据块组成),如果这样的空闲块过多,比如平均到每个数据文件上超过了100个(参考值),那么该表空间的碎片状况就比较严重了,可以尝试用以下的SQL命令进行表空间相邻碎片的接合;
MAX_CHUNK列的结果是表空间上最大的可用块大小,如果该表空间上的对象所需分配的空间(NEXT值)大于可用块的大小的话,就会提示ORA-1652、ORA-1653、ORA-1654的错误信息,应该及时对表空间的空间进行扩充,以避免这些错误发生。
检查碎片的另外方法:
脚本:
rem FSFI Value Compute
rem fsfi.sql
column FSFI format 999,99
select tablespace_name,sqrt(max(blocks)/sum(blocks))*
(100/sqrt(sqrt(count(blocks)))) FSFI
from dba_free_space
group by tablespace_name order by 1;
spool fsfi.rep;
自由空间碎片是由几部分组成,如范围数量、最大范围尺寸等,我们可用 FSFI--Free Space Fragmentation Index (自由空间碎片索引)值来直观体现:
FSFI=100*SQRT(max(extent)/sum(extents))*1/SQRT(SQRT(count(extents)))
可以看出, FSFI 的最大可能值为 100 (一个理想的单文件表空间)。随着范围的增加, FSFI 值缓慢下降,而随着最大范围尺寸的减少, FSFI 值会迅速下降。fsfi的值越小表示碎片越多。
alter tablespace tablespace_name(表空间名) coalesce;
如果收缩不能改变thunk的大小,就需要重整表空间
重整表空间:
1.exp 出,然后imp导入。在oralce10g之后,可以使用expdp和impdp来进行导入导出
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/20245333/viewspace-680826/
,如需转载,请注明出处,否则将追究法律责任。