资源描述:
《oracle 表碎片的监控与清理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、利用DBMS_SPACE包对Oracle表碎片进行监控与清理如果经常进行频繁的insert与delete操作,将会使表的HWM(高水位)变高,这样在作全表扫的操作时,将花费更多的成本。一般而言,当实际含有行数据的数据块只占HWM的50%时,我们一般认为表中数据块存在较大的浪费,出现这样的情况,一般建议对表进行重建。对于查询某张表的空间使用情况,Oracle提供了一个包DBMS_SPACE来完成。关于该包的使用方法可以参见其说明。这里主要提供了一种快速布署的方法,来对数据库中的相关表进行监控,对浪费空间比较大的表进行表的重建,统计信息收集。其思路是,首先对
2、数据库中所有用户的表作调查,确定哪些表需要监控,创建一张表来维护监控信息,碎片情况的收集通过Procedure来完成,如果有需要重建的表,则生成相关的语句,并将语句以邮件的方式发出。相关的脚本在HP-UX上运行,如果是其它平台,可作相应的修改。一.在Oracle用户下创建相关的目录mkdir/oracle/utils/tb_monitormkdir/oracle/utils/tb_monitor/logmkdir/oracle/utils/tb_monitor/mail_result二.创建TB_MONITOR表,由于这里是通过perfstat用户来进行
3、监控,所以还需要显示的进行授权,方能在后面的procedure中查询dba_segments数据字典TB_MONITOR表结构说明如下:TABLE_NAME:需要监控的表的名称。OWNER:表所属用户。SIZE_THRESHOLD:表的大小阈值WASTE_THRESHOLD:浪费率的大小阈值,默认值为70%。SGM_SPACE_MANAGEMENT:段管理方式,分为MANUAL和AUTOCURRENT_SIZE:表当前的大小。CURRENT_WASTE:表当前的浪费率。脚本如下:grantselectondba_segmentstoperfstat;co
4、nnperfstat/perfstatCREATETABLE"PERFSTAT"."TB_MONITOR"("TABLE_NAME"VARCHAR2(200)NOTNULLENABLE,"OWNER"VARCHAR2(20)NOTNULLENABLE,"SIZE_THRESHOLD"NUMBER,"WASTE_THRESHOLD"NUMBER,"SGM_SPACE_MANAGEMENT"VARCHAR2(6),"CURRENT_SIZE"NUMBER,"CURRENT_WASTE"NUMBER,CONSTRAINT"PK_TAB_NAME"PRIMARY
5、KEY("TABLE_NAME","OWNER")USINGINDEXPCTFREE10INITRANS2MAXTRANS255);完成表的创建后,赋予Public的查询权限,创建公共同义词。以方便查询:grantselecton"PERFSTAT"."TB_MONITOR"topublic;createpublicsynonymTB_MONITORfor"PERFSTAT"."TB_MONITOR";一.确定需要监控的用户查看监控会涉及到哪些用户,并筛选需要监控的表setpagesize20selectusernamefromdba_userswher
6、eusernamenotin('SYS','SYSTEM','OUTLN','CTXSYS','DBSNMP','PERFSTAT','WMSYS','MDSYS','ORDSYS','ORDPLUGINS');可以按照下面的语句进行筛选需要监控的表,生成插入的sql语句,并将这些需要监控的表插入监控表中,这里没有监控分区表。根据情况再加入一些筛选的条件。另外,监控的范围是1M---20G大小的普通表。setfeedbackoffsetechooffsetheadingoffsetlines300setpagesize50000settrimspoolo
7、ncolsegment_nameFormata32colOwnerFormata12spooltable_monitor_insert.temp--selectOwner,segment_name,sum(bytes/1024/1024)fromdba_segmentswheresegment_namein(select'insertintoPERFSTAT.TB_MONITOR(owner,TABLE_NAME,CURRENT_SIZE)values('
8、
9、''''
10、
11、Owner
12、
13、''','
14、
15、''''
16、
17、segment_name
18、
19、''''
20、
21、',
22、'
23、
24、sumsize
25、
26、');'from(selectOwner,segment