Oracle 11g学习笔记–查询闪回
如果错误的提交了修改操作,并想查看被修改行原来的值,可以使用查询闪回。然后如果需要,就可以使用查询闪回的结果将这些行手工改回原来的值;
另外,查询闪回可根据一个时间值或系统变更号(scn)进行;数据库使用scn来跟踪对数据进行的修改,因此可以使用它来回闪到数据库中一个特定的scn时的状态;
使用场景:
你可能在某一时间点对某一个表执行了操作,此时如果你想回去查看执行操作之前的数据,你便可以使用闪回操作;
首先,授权,然后指定要闪回的时间点,然后就可以开始查询数据,此时查询的数据都是你在那个时间点以前操作的数据,时间点以后的更新并不会显示;(注意,在这个时间段,只能进行查询操作。)
使用结束后,便可禁用闪回操作,在操作数据库,就是对最新的数据操作了;
1.使用闪回的特权
--以sys身份连接到数据库
connect sys/change_on_install as sysdba
--将对dbms_flashback包的execute权限授予给user_name用户;
grant execute on sys.dbms_flashback to user_name;
2.时间闪回查询
●闪回到十分钟之前
execute dbms_flashback_at_time(sysdate - 10 / 1440);
注意:此处的日期是以天为单位的,而一天有1440分钟,所以会有如上写法;
●禁用闪回操作
execute dbms_flashback.disable();
3.系统变更号查询闪回
因为数据库是根据scn来跟踪对数据所做的变化的,要获取当前的scn,可以执行dbms_flashback.get_system_change_number();
●查询当前变更号
--定义变量
variable current_scn number
--查询scn并赋值给变量
execute: current_scn := dbms_flashback.get_system_change_number();
--输出变量
print current_scn;
●闪回到一个scn的状态
execute dbms_flashback.enable_at_system_change_number(:current_scn);