Oracle flashback特性(1.2)--闪回查询之As of scn

既然是基于scn的查询,我们就必须先得需要的scn值(DBA权限)。这里我们通过 dbms_flashback.get_system_change_number 函数来获取oracle当前的scn,之后再执行数据的修改操作。
SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER
------------------------
                  344197

SQL> delete jss_tb1 where  id>10;
已删除10行。

SQL> commit;
提交完成。

SQL> select * from jss_tb1 as of scn 344197;
        ID VL
---------- --------------------
         1 A
         2 B
         3 C
         4 D
         5 E
         6 F
         7 G
         8 H
         9 I
        10 J
        11 K
        12 L
        13 M
        14 N
        15 O
        16 P
        17 Q
        18 R
        19 S
        20 T
已选择20行。

执行insert,将删除的数据重新恢复回表jss_tb1
SQL> insert into jss_tb1 select *from jss_tb1 as of scn 344197 where id not in(select id from jss_tb1);
已创建10行。

SQL> commit;
提交完成。

实际上,Oracle在内部都是使用scn的,即使你指定的是as of timestamp,oracle也会将其转换成scn,系统时间标记与scn之间存在一张表,即SYS下的 SMON_SCN_TIME

SQL> desc sys.smon_scn_time;
 名称                                        是否为空? 类型
 ---------------------------------------- -------- ------------------------
 THREAD                                      NUMBER
 TIME_MP                                    NUMBER
 TIME_DP                                    DATE
 SCN_WRP                                    NUMBER
 SCN_BAS                                    NUMBER
 NUM_MAPPINGS                               NUMBER
 TIM_SCN_MAP                                RAW(1200)
 SCN                                        NUMBER
 ORIG_THREAD                                 NUMBER

每隔5分钟,系统产生一次系统时间标记与scn的匹配并存入sys.smon_scn_time表,该表中记录了最近1440个系统时间标记与scn的匹配记录,由于该表只维护了最近的1440条记录,因此如果使用as of timestamp的方式则只能flashback最近5天内的数据(假设系统是在持续不断运行并无中断或关机重启之类操作的话)。注意理解系统时间标记与scn的每5分钟匹配一次这句话,举个例子,比如scn:339988,339989分别匹配08-05-30 13:52:00和2008-13:57:00,则当你通过as of timestamp查询08-05-30 13:52:00或08-05-30 13:56:59这段时间点内的时间时,oracle都会将其匹配为scn:339988到undo表空间中查找,也就说在这个时间内,不管你指定的时间点是什么,查询返回的都将是08-05-30 13:52:00这个时刻的数据。
当然,具体的情况,执行一下select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss') from sys.smon_scn_time,可能会更好的理解一些。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30028528/viewspace-1518696/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30028528/viewspace-1518696/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值