在数据库技术大会上,做了《构建高可用数据库监控系统》的分享以后,很多朋友对北斗如何实现表的DML次数监控有兴趣,会上因为时间的原因,我只是说有系统视图可以查到这个信息,因此有了本文,可以稍微详细一点来说明是如何实现的。
我说的系统视图,具体指的是dba_tab_modifications/all_tab_modifications/user_tab_modifications,这几个视图收集了表自从上一次分析之后的DML累积次数。但是要注意,考虑到性能的影响,Oracle并不是实时统计这个数据的,在Oracle9i之前,约3个小时SMON进程会刷新一次数据,而Oracle9i以后这个时间间隔变成了15分钟。
因此以较高的频率来实时监控这个表的话,得到的并不是当前的准确数据。Oracle在dbms_stat包中提供了一个过程来手动刷新统计数据,假如在一天的业务低峰期采集一次数据的话,可以先执行该过程,就能得到较为准确的数据。但是,不建议在业务高峰期执行该过程。
exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;
在Oracle10g之前,必须手工开启表的monitoring属性,才会将DML统计信息收集到这个视图中。可以通过dba_tables.monitoring列查看表是否已经开启了监控。关于这个变化,可以参考Metalink ID 252597.1
alter table test monitoring;
Oracle10g之后,只要statistics_level是TYPICAL(默认)或者ALL,就能自动收集信息了,即使给表设置为nomonitoring也不能阻止,这个表的属性已经被废弃了。
desc dba_tab_modifications Name Null? Type ----------------------------------------- -------- ---------------------------- TABLE_OWNER VARCHAR2(30) TABLE_NAME VARCHAR2(30) PARTITION_NAME VARCHAR2(30) SUBPARTITION_NAME VARCHAR2(30) INSERTS NUMBER UPDATES NUMBER DELETES NUMBER TIMESTAMP DATE TRUNCATED VARCHAR2(3) DROP_SEGMENTS NUMBER

v$sql 算差值也可以得到时间范围内的dml语句~~~
“dba_tab_modifications/all_tab_modifications/dba_tab_modifications”
最后一个改为user_tab_modifications吧。
大师,现在我们公司准备在linux(rhel4 or rhel5)上安装oracle10g(or oracle11g),
我这块经验不足,根据稳定性与bug及少打patch的原则,
1,在rhel4上安装oracle10g
2,在rhel5上安装oracle11g
3,在rhel4上安装oracle10g
以上应优先哪一种呢?
请大师帮指导下!
实在经验少点,一般这种前期规划要从哪些方面去考虑啊?
或者该去查哪些资料,一下子不知如何下手?
Oracle11g目前在某些环境下可能碰到一些bug。每个版本都会有一些bug,具体用哪个还需要结合硬件和应用环境考虑的,一般如果不是特别需要最新版本的某个特性,稍微老一些的版本可能更稳妥些。最好是能实际的做一次压力较大的稳定性测试。
谢谢大师!