oracle多版本控制/读一致性和非阻塞读(1)

SCN:system Change Number /system commit number : 系统修改号/系统提交号,scn是oracle内部时钟,每次发生提交的时候,这个时钟(scn)都会自动滴答(递增更新),这个scn很容易得到:

declare
v_scn number;
begin
exec v_scn:= dbms_flashback.get_system_change_number;
dbms_put.put_line('scn:' || v_scn);
end;

有了scn,我们就可以告诉oracle我们要查询的时间点,以后查询的时候,就可以只看这个时间点上的数据:

select count(0) from t_name;
count(0)
--------------
       100

然后我们把这个表的数据给删掉,并且进行提交:

delete from t_name;
commit;
select count(0) from t_name;
count(0)
--------------
       0

不过使用闪回查询(as of scn /as of timestamp)可以让oracle告诉我们,这个时间点上的数据:

 select  count(*), :v_scn then_scn,dbms_flashback.get_system_change_number now_scn from t_name as of scn :v_scn;

count(*)   then_scn  now_scn
-------------------------------------
  100             65465     65466

 通过scn时间点的查询,能获取到那个时间点上版本的数据 count=100;

猜你喜欢

转载自teachertina.iteye.com/blog/1757360