Oracle与SQL Server时态表对比及历史数据查询问题
针对Oracle时态表(Flashback Archive)的问题解答
问题1:单日多次更新无法获取完整历史变更记录
Oracle的Flashback Archive(时态表实现)本身会记录每一次行变更的历史版本,包括单日多次更新的情况,你查询不到完整记录大概率是查询方式不对。
如果你用
AS OF TIMESTAMP语句,只能获取指定时间点的数据快照,自然看不到多次变更的历史。要获取所有历史版本,改用闪回版本查询,示例语句:SELECT VERSIONS_STARTTIME 变更开始时间, VERSIONS_ENDTIME 变更结束时间, VERSIONS_OPERATION 操作类型(I=插入/U=更新/D=删除), emp.* FROM emp VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE;这个语句会返回该表自启用归档以来的所有版本记录,包括同一天内的多次更新。
另外,Flashback Archive会自动创建对应的历史表(默认命名规则为原表名+
_HIST),你也可以直接查询这个历史表,里面存储了所有被归档的旧版本数据。
问题2:Flashback Archive是否为临时表,是否会被数据库事件清理
Flashback Archive不是临时表,它是完全持久化的归档对象,存储在你指定的表空间中,不会因常规数据库事件(比如重启、事务回滚、临时数据清理)被随意清理:
归档数据的清理仅受你设置的保留期限控制,你可以在创建或修改归档时指定保留时长,比如:
CREATE FLASHBACK ARCHIVE employee_fba TABLESPACE archive_tbs RETENTION 2 YEARS; -- 保留2年数据只有当数据超过这个保留期限时,Oracle才会自动清理归档中的旧数据。
临时表的数据会在会话结束或事务提交后被清空,但Flashback Archive的历史表和普通业务表一样,数据会持久存储,除非你主动删除归档、修改保留策略,或者对应的表空间被误操作。
不需要通过触发器自定义历史表,只要正确使用Flashback Archive的查询语法,就能获取完整的变更历史,同时归档数据的持久化也有保障。
内容的提问来源于stack exchange,提问作者Vinay Bhushan
相关产品推荐
相关产品推荐

