1 闪回查询
Oracle提供了四种可供使用的闪回技术(闪回查询,闪回删除,闪回归档,闪回数据库),每种都有不同的底层体系结构支撑,但其实这四种不同的闪回技术部分功能是有重叠的,使用时也需要根据实际场景合理选择最合适的闪回功能。
其中,以表为单位查询其过去的数据称为闪回查询,闪回查询能够在undo段内搜索“旧”数据,数据库能够保留多少undo数据决定了闪回查询的时间窗口的大小。
闪回查询分为两种:
- 闪回时间点查询:在过去的一个时间点上的查询(as of子句与dbms_flashback包)
- 闪回版本查询:在过去的一段时间范围内的查询(versions between子句)
1.1 闪回时间点查询
功能描述:可以查询过去某个时间段的数据库状态。
工作原理:Oracle 会提取所需要的撤销数据(前提是撤销是可用的,即撤销数据还没被覆盖)进行回滚,但这种回滚是临时的,仅针对当前session可见。
SQL> select * from dept as of timestamp to_timestamp('2016-09-10 11:00:00','yyyy-mm-dd hh24:mi:ss');
1.1.1 闪回查询并插入表中
insert into 表名 select * from 表名 as of timestamp-分钟数/使用SCN;
1.1.2 闪回到新建的表中
create table 表名 as select 表名 as as of timestamp-分钟数/使用SCN;
1.1.3 闪回查询
select * from tableName as of timestamp to_timestamp('2009-01-25 12:00:00', 'yyyy-mm-dd hh24:mi:ss')
1.1.4 查看当前系统时间
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;
select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;
select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual
# 12小时制
select to_char(sysdate,'yy-mm-d