监控表发生的改变【MONITOR THE MODIFICATIONS OF TABLE】

简介:
 今天同事询问是否可以知道某些表是否被增删改过?
    对于这个问题,我们特别自然容易想到的解决方法就是使用ORACLE的AUDIT。
    其实对于一些只需要知道表是否被增删改的问题“大颗粒”安全性要求,可以使用一个我们平常不曾注意的一个建表属性MONITORING。
    对于ORACLE中表的“成堆”属性,一般情况下,在建表时我们会经常使用ORACLE的默认参数。而MONITORING这个参数也经常会默认一把,非默认时使用NOMONITORING参数。
    其实这个参数可以轻松解决我同事的这个需求。
    一旦使用这个参数建立表并且ORACLE完成了对该表的统计信息采集后,就会在DBA[ALL/USER]_TAB_MODIFICATIONS表中记录该表被修改的信息了!
    其中记录了该表或表的PARTITION的INSERT/UPDATE/DELETE/DROP_SEGMENTS/TRUNCAE的次数。但要注意的一 点就是:INSERT/UPDATE/DELETE只能记录一个大概次数。而不是十分精确的次数。以下为ORACLE官方文档提供的 DBA_TAB_MODIFICATIONS字段及其说明。
   
TABLE_OWNER           Owner of the modified table. 
TABLE_NAME              Name of the modified table 
PARTITION_NAME        Name of the modified partition 
SUBPARTITION_NAME   Name of the modified subpartition 
INSERTS NUMBER        Approximate number of inserts since the 
                               last time statistics were gathered 
UPDATES NUMBER       Approximate number of updates since the 
                               last time statistics were gathered 
DELETES NUMBER        Approximate number of deletes since the 
                               last time statistics were gathered 
TIMESTAMP DATE       Indicates the last time the table was modified 
DROP_SEGMENTS        Number of partition and subpartition segments
                               dropped since the last analyze


    还有需要注意的重要一点,出于保护ORACLE数据库性能方面的考虑,在XXX_TAB_MODIFICATIONS表中显示的数据并不是实时的数据,如果需要看到最近发生的最新数据,可以使用DBMS_STAT包来统计最新变化。
    如:SQL> exec dbms_stats.flush_database_monitoring_info;
        PL/SQL procedure successfully completed

================小发现
   ORACLE官方10.2版本的文档(Part Number B14237-02)在描述表结构时和实际的10.2版本数据库中的DBA_TAB_MODIFICATIONS不完全相同,少记录了一个叫做 TRUNCATED的字段,用来记录该表被TRUNCATED的次数。

   同时,也“难能可贵”的出现了拼写错误将DBMS_STAT写成了DIMS_STATS,让我还以为是个新的系统管理包。-:)

本文转自Be the miracle!博客51CTO博客,原文链接http://blog.51cto.com/miracle/54132如需转载请自行联系原作者


Larry.Yue

相关文章
|
9月前
|
关系型数据库 MySQL
mysql统计数据表中同一字段不同状态的COUNT()语句
mysql统计数据表中同一字段不同状态的COUNT()语句
65 0
|
关系型数据库 MySQL
MySQL:自动维护create_time和update_time字段
通过建表语句设置,让mysql自动维护这两个字段,那么编程的时候也能少写一部分代码
67 0
|
监控 关系型数据库 PostgreSQL
PostgreSQL 12: 新增 pg_stat_progress_create_index 视图监控索引创建进度
PostgreSQL 12 版本之前,对PostgreSQL大表创建索引时是一个比较痛苦的过程,创建索引过程中无法得知索引创建进度,PostgreSQL 12 在运维监控功能方面得到增强,新增 pg_stat_progress_create_index 视图可以监控索引的创建进度,本文简单演示。
2042 0
|
NoSQL
随笔:sending data状态包含了使用内部临时表
这是一个我的随笔记录,这些过程非常有用,也非常明显。 欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下: 语句如下: mysql> desc select id,count(*) from t110 group by id; +----+-------------+-------+...
866 0
|
SQL Go 数据库
SQL Server中如何定位Row Lock锁定哪一行数据
原文:SQL Server中如何定位Row Lock锁定哪一行数据 在SQL Server中有时候会使用提示(Hint)强制SQL使用行锁(Row Lock),前两天有个同事咨询了一个问题,如何定位Row Lock具体锁定了哪一行。
1077 0