利用DBMS_SPACE包对Oracle 表碎片进行监控与清理 如果经常进行频繁的insert与delete操作,将会使表的HWM(高水位)变高,这样在作全表扫的操作时,将花费更多的成本
一般而言,当实际含有行数据的数据块只占 HWM的50%时,我们一般认为表中数据块存在较大的浪费,出现这样的情况,一般建议对表进行重建
对于查询某张表的空间使用情况,Oracle提供了一个包DBMS_SPACE来完成
关于该包的使用方法可以参见其说明
这里主要提供了一种快速布署的方法,来对数据库中的相关表进行监控,对浪费空间比较大的表进行表的重建,统计信息收集
其思路是,首先对数据库中所有用户的表作调查,确定哪些表需要监控,创建一张表来维护监控信息,碎片情况的收集通过 Procedure来完成,如果有需要重建的表,则生成相关的语句,并将语句以邮件的方式发出
相关的脚本在HP-UX上运行,如果是其它平台,可作相应的修改
一. 在Oracle用户下创建相关的目录 mkdir /oracle/u tils/tb_monitor mkdir /oracle/u tils/tb_monitor/log mkdir /oracle/u tils/tb_monitor/mail_resu lt 二. 创建 TB_MONITOR表,由于这里是通过 perfstat用户来进行监控,所以还需要显示的进行授权,方能在后面的procedure中查询 dba_segments数据字典 TB_MONITOR表结构说明如下: TABLE_NAME:需要监控的表的名称
OWNER:表所属用户
SIZE_THRESHOLD:表的大小阈值 WASTE_THRESHOLD:浪费率的大小阈值,默认值为 70%
SGM_SPACE_MANAGEMENT:段管理方式,分为 MANUAL和 AUTO CURRENT_SIZE: