前段时间同事问我能否查询表中每条记录的更新时间,这张表没有用于Sysdate的Date的字段, 使我想起Ora_rowscn这个伪列
1、查询Ora_rowscn
select ora_rowscn,t.* from tab_name;
2、Ora_rowscn分类
select DEPENDENCIES from dba_tables 可以看出这里有两种值,
分别为: ROWDEPENDENCIES 和NOROWDEPENDENCIES,
解释:当你更新DML SQL的时候,如果采用的是ROWDEPENDENCIES 的方式,那么在更新数据的时候,同时更新SQL影响的数据的伪列Ora_orwscn,如果采用的是NOROWDEPENDENCIES的方式,那么在更新数据的时候,同时更新SQL影响数据的所在的Data Block的伪列Ora_orwscn,也就是说整个Block的所有记录都更新成同一个相同的scn值.
3、Ora_rowscn的用途
我们知道可以把scn转为Date,也就该条记录更新的对应的数据库时间
select scn_to_timestamp(ora_rowscn) ,t.* from tab_name;
这里可能碰到如下的错误,那是因为用于换算的scn值,oracle只能认识到距今5天的数据,超过5天,是不能换算出来的.
SQL> SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM dept;
SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM dept
*
ERROR at line 1:
ORA-08181: specified number is not a valid system change number
ORA-06512: at "SYS.SCN_TO_TIMESTAMP", line 1
至今还没好的方法,能查询每条记录更新的时间,如有好方法的望告知下,Thanks!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26634508/viewspace-732341/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26634508/viewspace-732341/