目前oracle9i版本在生产环境中还大量存在,统计信息更新操作基本依靠脚本完成。尤其是表中数据的变化量的统计基本靠手工方式进行,效率和准确性都很低。从oracle9i版本,软件已经提供了对DML操作的跟踪的方法,只是不象oracle10g是自动开启,需要手工将才功能进行激活。
Oracle提供了两种激活方法,一种是对用户、一种是对表。
对用户进行实施方法:
DBMS_STATS.ALTER_SCHEMA_TABLE_MONITORING (
ownname VARCHAR2 DEFAULT NULL,
monitoring BOOLEAN DEFAULT TRUE);
对单表实施的方法
Alter table (MONITORING/NOMONITORING)
通过记录表中DML操作,可以为优化统计更新操作提供依据。而且从oracle9i版本开始,在dbms_stats包中提供了GATHER STALE选项,可以根据记录的DML操作情况,在运行dbms_stats可以自动判断是否需要进行统计更新工作。在这里不着重表述dbms_stats的使用方法。
下面看看开启监控后的效果
首先创建了一个分区表 1、 CREATE TABLE "DEMO"."T_PARTITION" ( "ID" NUMBER )
(PARTITION "P1" VALUES LESS THAN (30),
PARTITION "P2" VALUES LESS THAN (60), PARTITION "P3" VALUES LESS THAN (90))
2、开启对此表的监控 Alter table t_partition MONITORING;
3、对此表进行DML操作(insert、delete、update) 略
4、查询结果 Oracle通过user_tab_modifications进行展示统计结果,因信息不是实时刷新到数据字典中,需要使用execute DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;命令帮助强行刷新,oracle的自动刷新需要15分钟。此数据保留在system表空间中。
SQL> select TABLE_NAME, INSERTS , UPDATES, DELETES, TIMESTAMP from user_tab_modifications;
TABLE_NAME INSERTS UPDATES DELETES TIMESTAMP ------------ ---------- ---------- ---------- ------------------- T_PARTITION 29 78 0 2010-03-17 14:57:02 T_PARTITION 30 0 0 2010-03-17 14:27:35 T_PARTITION 30 0 20 2010-03-17 14:28:43 T_PARTITION 911 0 11 2010-03-17 14:28:43 |
通过以上信息可以明确的计算出,在某个时间段内一个表数据变化情况。为统计更新操作提供了有用的数据依据。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/19446/viewspace-629726/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/19446/viewspace-629726/