oracle 跟踪表 dml,Oracle中定位数据表的最近DML时间

由于时间久,数据库中的表太多,前后很多人操作过,也不知道哪些表有用哪些没用,于是,想通过判断数据表的最后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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值