监控表发生的改变【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

相关文章
|
4月前
|
关系型数据库 数据库 PostgreSQL
pg下delete数据后。除了使用VACUUM FULL TABLE 才能释放磁盘空间外的方法。
【8月更文挑战第12天】pg下delete数据后。除了使用VACUUM FULL TABLE 才能释放磁盘空间外的方法。
203 1
|
监控 关系型数据库 PostgreSQL
PostgreSQL 12: 新增 pg_stat_progress_create_index 视图监控索引创建进度
PostgreSQL 12 版本之前,对PostgreSQL大表创建索引时是一个比较痛苦的过程,创建索引过程中无法得知索引创建进度,PostgreSQL 12 在运维监控功能方面得到增强,新增 pg_stat_progress_create_index 视图可以监控索引的创建进度,本文简单演示。
2255 0
|
NoSQL
随笔:sending data状态包含了使用内部临时表
这是一个我的随笔记录,这些过程非常有用,也非常明显。 欢迎关注我的《深入理解MySQL主从原理 32讲 》,如下: 语句如下: mysql> desc select id,count(*) from t110 group by id; +----+-------------+-------+...
902 0
|
关系型数据库 MySQL
MySQL:简单记录performance_schema.threads中的3种线程ID各自的含义
简单记录 如下线面3种ID到底什么意思,这个问题我一直没去看: (root@localhost)[05:47:31] [performance_schema ;]> select THREAD_ID,PROCESSLIST_ID,THREAD_OS_ID from performance_schema.
1454 0
|
SQL Go 数据库
SQL Server中如何定位Row Lock锁定哪一行数据
原文:SQL Server中如何定位Row Lock锁定哪一行数据 在SQL Server中有时候会使用提示(Hint)强制SQL使用行锁(Row Lock),前两天有个同事咨询了一个问题,如何定位Row Lock具体锁定了哪一行。
1121 0
|
SQL 监控 测试技术
SQL Server 更改跟踪(Chang Tracking)监控表数据
原文:SQL Server 更改跟踪(Chang Tracking)监控表数据 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 主要区别与对比(Compare) 实现监控表数据步骤(Process) 参考文献(References) 二.
1836 0
|
SQL 数据库 Go
使用sql语句创建修改SQL Server标识列(即自动增长列)
原文:使用sql语句创建修改SQL Server标识列(即自动增长列) 一、标识列的定义以及特点SQL Server中的标识列又称标识符列,习惯上又叫自增列。该种列具有以下三种特点:1、列的数据类型为不带小数的数值类型2、在进行插入(Insert)操作时,该列的值是由系统按一定规律生成,不允许空值3、列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列。
2074 0