签到成功

知道了

CNDBA社区CNDBA社区

DBA_TAB_MODIFICATIONS视图介绍说明

2017-05-05 12:06 6117 0 原创 Oracle 11G
作者: Expect-乐

官网说明

DBA_TAB_MODIFICATIONS describes modifications to all tables in the database that have been modified since the last time statistics were gathered on the tables. Its columns are the same as those in "ALL_TAB_MODIFICATIONS".


Note:

This view is populated only for tables with the MONITORING attribute. It is intended for statistics collection over a long period of time. For performance reasons, the Oracle Database does not populate this view immediately when the actual modifications occur. Run the FLUSH_DATABASE_MONITORING_INFO procedure in the DBMS_STATS PL/SQL package to populate this view with the latest information. The ANALYZE_ANY system privilege is required to run this procedure.

地址:http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_2107.htm#REFRN20280

该视图作用:

DBA_TAB_MODIFICATIONS记录了自上次收集表统计信息以来对数据库中所有表的修改操作,包括增删改查,通过查看视图的结构可以发现。

http://www.cndba.cn/Expect-le/article/1900

SQL> 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)  --自从上次分析之后是否被truncate过。

 DROP_SEGMENTS                                      NUMBER

可以调用DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO手动更新该视图里的内容,当然数据库会自动调用该过程去更新。

测试

2.1   环境

SQL> select * from v$version where rownum=1;

 

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

2.2   创建测试表

SQL> create table tt as select * from dba_tables;

 

Table created.

2.3   查看表是否开启monitor

SQL> select MONITORING from dba_tables t where t.table_name='TT';

 

MON

---

YES

没有问题。

2.4   查看视图是否该表的记录

SQL> select table_owner,table_name,inserts,UPDATES,deletes,timestamp,truncated,drop_segments from sys.dba_tab_modifications where table_name='TT';

 

no rows selected

可以看到没有该表的信息

2.5   手动更新

SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO

 

PL/SQL procedure successfully completed.

再次查看,还是没有记录

SQL> select table_owner,table_name,inserts,UPDATES,deletes,timestamp,truncated,drop_segments from sys.dba_tab_modifications where table_name='TT';

 

no rows selected

2.6   插入数据

SQL> insert into tt select * from dba_tables where rownum <=10;

 

10 rows created.


--不提交

2.7   再次手动更新

SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO



PL/SQL procedure successfully completed.

--可以看到 INSERTS列为10,和之前插入语句相符。插入了十条数据。http://www.cndba.cn/Expect-le/article/1900

SQL> select table_owner,table_name,inserts,UPDATES,deletes,timestamp,truncated,drop_segments from

sys.dba_tab_modifications where table_name ='TT';

TABLE_OWNER                    TABLE_NAME                        INSERTS    UPDATES    DELETES TIMESTAMP    TRU DROP_SEGMENTS

------------------------------ ------------------------------ ---------- ---------- ---------- ------------ --- -------------

SYS                            TT                                     10          0          0 05-MAY-17    NO

注意:

1. 即使没有提交,也会有记录

2. 刚创建的表时,插入的数据是没有被记录的。

2.8   收集表统计信息

SQL> exec dbms_stats.gather_table_stats(OWNNAME =>'SYS',TABNAME =>'TT');

 

PL/SQL procedure successfully completed.

--可以看到,记录被从该视图中删除了。符合官方文档中的说明。

http://www.cndba.cn/Expect-le/article/1900

SQL> select table_owner,table_name,inserts,UPDATES,deletes,timestamp,truncated,drop_segments from sys.dba_tab_modifications where table_name = 'TT';

 

no rows selected

2.9   对该表做DML操作

--更新两行数据

SQL> update tt set table_name ='ttt' where table_name ='TYPE_MISC$';

 

2 rows updated.

--删除一行数据http://www.cndba.cn/Expect-le/article/1900

SQL> delete tt where rownum =1;

 

1 row deleted.

--手动更新

http://www.cndba.cn/Expect-le/article/1900

SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO

 

PL/SQL procedure successfully completed.

--查看该视图

SQL> select table_owner,table_name,inserts,UPDATES,deletes,timestamp,truncated,drop_segments from

sys.dba_tab_modifications where table_name ='TT';

 

TABLE_OWNER                    TABLE_NAME                        INSERTS    UPDATES    DELETES TIMESTAMP    TRU DROP_SEGMENTS

------------------------------ ------------------------------ ---------- ---------- ---------- ------------ --- -------------

SYS                            TT                                      0          2          1 05-MAY-17    NO              0

 

1 rows selected.

可以看到,符合前面所做的操作。

http://www.cndba.cn/Expect-le/article/1900
http://www.cndba.cn/Expect-le/article/1900

 

2.10   关闭该功能

通过修改隐藏参数可以关闭该功能。

隐藏参数:_dml_monitoring_enabled

 

-关闭隐藏参数

http://www.cndba.cn/Expect-le/article/1900

SQL> alter system set "_dml_monitoring_enabled"=false scope=memory;

 

System altered.

--插入一条数据

SQL> insert into tt select * from dba_tables where rownum=1;

 

1 row created.

--手动更新

http://www.cndba.cn/Expect-le/article/1900

http://www.cndba.cn/Expect-le/article/1900

SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO

 

PL/SQL procedure successfully completed.

--再次查看是否有记录更新

SQL> select table_owner,table_name,inserts,UPDATES,deletes,timestamp,truncated,drop_segments from

sys.dba_tab_modifications where table_name ='TT';

 

TABLE_OWNER                    TABLE_NAME                        INSERTS    UPDATES    DELETES TIMESTAMP    TRU DROP_SEGMENTS

------------------------------ ------------------------------ ---------- ---------- ---------- ------------ --- -------------

SYS                            TT                                      0          2          1 05-MAY-17    NO              0

 

1 rows selected.

可以看到,记录没有变化。

2.11   打开该功能

SQL> alter system set "_dml_monitoring_enabled"=true scope=memory;

 

System altered.

2.12   总结

1.create table创建的表,插入的数据不会被记录。

2.即使作了dml操作,如果没有commit,在刷新后exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFOsys.dba_tab_modifications也会存在记录。

3.收集表统计信息后,该视图里的记录会消失。

4.仅仅隐含参数_dml_monitoring_enabled可以关闭监测在11GR2下。

版权声明:本文为博主原创文章,未经博主允许不得转载。

DBA_TAB_MODIFICATIONS

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Expect-乐

Expect-乐

关注

Without the continuous bitter cold, there can be no fragrant plum blossom

  • 336
    原创
  • 6
    翻译
  • 100
    转载
  • 41
    评论
  • 访问:1548628次
  • 积分:1957
  • 等级:核心会员
  • 排名:第4名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ