Oracle record history using as of timestamp within a range(Oracle 记录历史使用截至时间戳在一个范围内)
问题描述
我最近了解到 oracle 有一个对我非常有用的功能 - 因为设计者/实施者不太关心数据历史 - 如果记录在 oracle 缓存中可用,我可以查询它的历史状态,像这样:
I recently learnt that oracle has a feature which was pretty useful to me - as the designer/implementator didn't care much about data history - I can query the historical state of a record if it's available yet in the oracle cache, like this:
select *
from ( select *
from sometable where some_condition )
as of timestamp sysdate-1
但是现在我需要检查一个范围内的历史数据.无论如何都可以使用缓存吗?
But now I need to check the historical data within a range. Is it possible anyhow, using the cache?
推荐答案
是的,像这样:
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 参数限制,通常是几小时而不是几天.
Note that how far back you can go is limited by the UNDO_RETENTION parameter, and will typically be hours rather than days.
这篇关于Oracle 记录历史使用截至时间戳在一个范围内的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Oracle 记录历史使用截至时间戳在一个范围内
基础教程推荐
- 无法解决整理冲突 2021-01-01
- SQL:使用来自具有相同列名的两个表中的数据... 2021-01-01
- 需要 MySQL 5.1 中的抽象触发器来更新审计日志 2021-01-01
- 如何使用 mysql.connector 禁用查询缓存 2022-01-01
- SSMS 中的权限问题:“对象 'extended_properties'、数据库 'mssqlsystem_resource'、... 错误 229)上的 SELECT 权限被拒绝" 2022-01-01
- SQL Server 实例在登录协商期间返回无效或不受支持的协议版本 2021-01-01
- 是否可以执行按位分组功能? 2021-01-01
- 在 SQL 中连接多个表 2021-01-01
- 将 SQL Server DateTime 列迁移到 DateTimeOffset 2021-01-01
- SQL 效率:WHERE IN 子查询 vs. JOIN 然后 GROUP 2021-01-01
