Oracle Flashback

Oracle有个非常强大的功能:闪回,它可以修改ORACLE当前用户的时间,令其回到过去指定的某个时间点,并且可以还原当时的数据,就算数据被修改、删除,都能够通过闪回重现。
如果不小心删除了数据,并且已经commit了,那么可以利用闪回回到过去,将数据复制出来,手动恢复。
注意:闪回不能重现已经被TRUNCATE的数据。

下面进入历史重现——闪回的操作:
1、如果需要使用闪回功能,那么需要dba给当前用户赋予权限:
grant execute on sys.dbms_flashback to test;

2、假定原有一个表:table1
3、字段:ID,Name,并且存在8条数据,
4、SQL> select * from table1;

ID NAME
--- ----------
1 User_01
2 User_02
3 User_03
4 User_04
5 User_05
6 User_06
7 User_07
8 User_08

8 rows selected
5、现在删除数据:DELETE FROM table1;commit;
6、再次查询:
SQL> select * from table1;

ID NAME
--- ----------
7、已经没有数据了,那么开始闪回——回到过去:
execute dbms_flashback.enable_at_time(sysdate - 10/1440);
10/1440表示10分钟
8、再来查询一把:
SQL> select * from table1;

ID NAME
----- ----------
1 User_01
2 User_02
3 User_03
4 User_04
5 User_05
6 User_06
7 User_07
8 User_08

8 rows selected
历史重现了,系统闪回到了数据未被删除的时间点。
9、我们再回到现在:
execute dbms_flashback.disable;
10、再次查询:
SQL> select * from table1;

ID NAME
--- ----------
已经没有数据了,说明在当前时间点,数据已经被删除了。
11、做得彻底一点:TRUNCATE TABLE table1;
12、再次闪回:execute dbms_flashback.enable_at_time(sysdate - 10 /1440);
13、SQL> select * from table1;

ID NAME
--- ----------
由于数据被TRUNCATE 了,所以就算闪回也没有办法了。

14、ORACLE还能够根据系统变更号SCN来进行闪回:
获取当前系统SCN:
SQL> var v_sys_cns number;
SQL> execute :v_sys_cns := dbms_flashback.get_system_change_number;
PL/SQL procedure successfully completed
v_sys_cns
---------
383054
15、回到指定SCN的时间点:
SQL> execute dbms_flashback.enable_at_system_change_number(383054);
16、禁止闪回:execute dbms_flashback.disable();

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

转载于:http://blog.itpub.net/10742223/viewspace-213896/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值