ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle中定位数据表的最近DML时间

Oracle中定位数据表的最近DML时间

原创 Linux操作系统 作者:xz43 时间:2011-11-29 13:32:34 0 删除 编辑
由于时间久,数据库中的表太多,前后很多人操作过,也不知道哪些表有用哪些没用,于是,想通过判断数据表的最后DML时间,来确定哪些数据表最近没操作过。
SQL> create table A as select id,name from t_employee;
Table created
SQL> select tb.table_name,tb.monitoring from user_tables tb where table_name='A';
TABLE_NAME                     MONITORING
------------------------------ ----------
A                              YES
由此可以看到,数据表默认都是启动了monitoring功能的。
 
下面,通过ORA_ROWSCN来定位表A的最后dml时间。
SQL> select max(ora_rowscn), scn_to_timestamp(max(ora_rowscn)) from mvs.A;
MAX(ORA_ROWSCN) SCN_TO_TIMESTAMP(MAX(ORA_ROWSC
--------------- --------------------------------------------------------------------------------
      155220760 29-11月-11 11.25.50.000000000 上午
有人说只要表为monitoring状态,从视图 user_tab_modifications 也可以看到,可实际上确什么都没查到。
SQL> select * from user_tab_modifications where table_name='A';
TABLE_NAME                     PARTITION_NAME                 SUBPARTITION_NAME                 INSERTS    UPDATES    DELETES TIMESTAMP   TRUNCATED DROP_SEGMENTS
------------------------------ ------------------------------ ------------------------------ ---------- ---------- ---------- ----------- --------- -------------
删除A中的数据,只剩下一条。
SQL> select max(ora_rowscn), scn_to_timestamp(max(ora_rowscn)) from mvs.A;
MAX(ORA_ROWSCN) SCN_TO_TIMESTAMP(MAX(ORA_ROWSC
--------------- --------------------------------------------------------------------------------
      155223006 29-11月-11 11.46.33.000000000 上午
然后再插入一条记录。
SQL> insert into a(id,name) values(1,'test');
1 row inserted
SQL> commit;
Commit complete
查看记录及对应的伪列ORA_ROWSCN值。
SQL> select id,name,ora_rowscn from a order by id;
        ID    NAME                 ORA_ROWSCN
----------   -------------------- ----------------------
         1     test                  155223032
 1108     s11                   155223006
SQL>
通过上面的伪列 ORA_ROWSCN 及函数SCN_TO_TIMESTAMP(ORA_ROWSCN)就可以获得该行数据的最后DML时间。
 
SQL> insert into a(id,name) values(2,'test');
1 row inserted
SQL> insert into a(id,name) values(3,'test');
1 row inserted
SQL> commit;
Commit complete
SQL> select id,name,ora_rowscn from a order by id;
        ID NAME                 ORA_ROWSCN
---------- -------------------- ----------
         1 test                  155226434
         2 test                  155226434
         3 test                  155226434
 1108 s11                   155223006
SQL> insert into a(id,name) values(4,'test');
1 row inserted
SQL> commit;
Commit complete
SQL> select id,name,ora_rowscn from a order by id;
        ID NAME                 ORA_ROWSCN
---------- -------------------- ----------
         1 test                  155226448
         2 test                  155226448
         3 test                  155226448
         4 test                  155226448
 1108 s11                   155223006
SQL> insert into a(id,name) values(5,'test2');
1 row inserted
SQL> commit;
Commit complete
SQL> select id,name,ora_rowscn from a order by id;
        ID NAME                 ORA_ROWSCN
---------- -------------------- ----------
         1 test                  155226463
         2 test                  155226463
         3 test                  155226463
         4 test                  155226463
         5 test2                 155226463
 1108 s11                   155223006
6 rows selected
SQL>
 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9399028/viewspace-712346/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
鱼儿的学习空间

注册时间:2010-11-16

  • 博文量
    433
  • 访问量
    1863699