今天有朋友问,如何查看表最后dml操作时间,查询官方文档发现表ALL_TAB_MODIFICATIONS可以满足需求。
我们先来看看表ALL_TAB_MODIFICATIONS的简介
ALL_TAB_MODIFICATIONS describes tables accessible to the current user that have been modified since the last time statistics were gathered on the tables.
Related Views
DBA_TAB_MODIFICATIONS provides such information for all tables in the database.
USER_TAB_MODIFICATIONS provides such information for tables owned by the current user. This view does not display the TABLE_OWNER column.
Note:
These views are populated only for tables with the MONITORING attribute. They are intended for statistics collection over a long period of time. For performance reasons, the Oracle Database does not populate these views immediately when the actual modifications occur. Run the FLUSH_DATABASE_MONITORING_INFO procedure in the DIMS_STATS PL/SQL package to populate these views with the latest information. The ANALYZE_ANY system privilege is required to run this procedure.
These views are populated only for tables with the MONITORING attribute. They are intended for statistics collection over a long period of time. For performance reasons, the Oracle Database does not populate these views immediately when the actual modifications occur. Run the FLUSH_DATABASE_MONITORING_INFO procedure in the DIMS_STATS PL/SQL package to populate these views with the latest information. The ANALYZE_ANY system privilege is required to run this procedure.
Column Datatype NULL Description
TABLE_OWNER VARCHAR2(30) Owner of the modified table.
TABLE_NAME VARCHAR2(30) Name of the modified table
PARTITION_NAME VARCHAR2(30) Name of the modified partition
SUBPARTITION_NAME VARCHAR2(30) 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 Number of partition and subpartition segments dropped since the last analyze
TABLE_OWNER VARCHAR2(30) Owner of the modified table.
TABLE_NAME VARCHAR2(30) Name of the modified table
PARTITION_NAME VARCHAR2(30) Name of the modified partition
SUBPARTITION_NAME VARCHAR2(30) 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 Number of partition and subpartition segments dropped since the last analyze
看到官方叫views,我们还是称呼为表吧,下面做个实验,环境是11g
[oracle@cent6224 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Fri May 4 12:33:49 2012
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning and Data Mining options
SQL> create user modifytest identified by modifytest;
User created.
SQL> grant connect,resource to modifytest;
Grant succeeded.
SQL> conn modifytest/modifytest;
Connected.
SQL> set line 200
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
SQL> select * from USER_TAB_MODIFICATIONS;
Connected.
SQL> set line 200
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
SQL> select * from USER_TAB_MODIFICATIONS;
no rows selected
SQL> select table_name,inserts,updates,deletes from user_tab_modifications;
no rows selected
SQL> create table t(a number);
Table created.
SQL> select monitoring from user_tables where table_name='T';
MON
---
YES
---
YES
SQL> select * from USER_TAB_MODIFICATIONS;
no rows selected
SQL> insert into t values(1);
1 row created.
SQL> select * from USER_TAB_MODIFICATIONS;
no rows selected
SQL> commit;
Commit complete.
SQL> select * from USER_TAB_MODIFICATIONS;
no rows selected
SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;
BEGIN DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO; END;
BEGIN DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO; END;
*
ERROR at line 1:
ORA-20000: Insufficient privileges
ORA-06512: at "SYS.DBMS_STATS", line 4535
ORA-06512: at "SYS.DBMS_STATS", line 25376
ORA-06512: at line 1
ERROR at line 1:
ORA-20000: Insufficient privileges
ORA-06512: at "SYS.DBMS_STATS", line 4535
ORA-06512: at "SYS.DBMS_STATS", line 25376
ORA-06512: at line 1
SQL> conn / as sysdba
Connected.
SQL> grant analyze any to modifytest;
Grant succeeded.
SQL> exec DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;
PL/SQL procedure successfully completed.
SQL> select * from USER_TAB_MODIFICATIONS;
TABLE_NAME PARTITION_NAME SUBPARTITION_NAME INSERTS UPDATES DELETES TIMESTAMP TRU DROP_SEGMENTS
------------------------------ ------------------------------ ------------------------------ ---------- ---------- ---------- ------------------- --- -------------
T 1 0 0 2012-05-04 12:46:01 NO 0
SQL> analyze table t compute statistics;
------------------------------ ------------------------------ ------------------------------ ---------- ---------- ---------- ------------------- --- -------------
T 1 0 0 2012-05-04 12:46:01 NO 0
SQL> analyze table t compute statistics;
Table analyzed.
SQL> select * from USER_TAB_MODIFICATIONS;
no rows selected
SQL>
实验后发现analyze后表USER_TAB_MODIFICATIONS会清空
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12457158/viewspace-722429/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12457158/viewspace-722429/