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;