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;