我最近了解到oracle具有对我来说非常有用的功能-因为设计者/实现者不太在意数据历史记录- 我可以查询记录的历史状态(如果它在oracle缓存中仍然可用),如下所示:
select * from ( select * from sometable where some_condition ) as of timestamp sysdate-1
但是现在我需要检查范围内的历史数据。使用缓存是否有可能?
是的,像这样:
SQL> select sal from emp where empno=7369; SAL ---------- 5800 SQL> update emp set sal = sal+100 where empno=7369; 1 row updated. SQL> commit; Commit complete. SQL> update emp set sal = sal-100 where empno=7369; 1 row updated. SQL> commit; Commit complete. SQL> select empno, sal, versions_starttime,versions_xid 2 from emp 3 versions between timestamp sysdate-1 and sysdate 4 where empno=7369; EMPNO SAL VERSIONS_STARTTIME VERSIONS_XID ---------- ---------- --------------------------------------------------------------------------- -- 7369 5900 11-DEC-08 16.05.32 0014001300002A74 7369 5800 11-DEC-08 16.03.32 000D002200012EB1 7369 5800
请注意,您可以走多远受UNDO_RETENTION参数的限制,通常为几小时而不是几天。