本篇内容主要讲解“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>
到此,相信大家对“Oracle怎么定位数据表的最近DML时间”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。