oracle 闪回功能

Oracle有个非常强大的功能:闪回,它可以修改ORACLE当前用户的时间,令其回到过去指定的某个时间点,并且可以还原当时的数据,就算数据被修改、删除,都能够通过闪回重现。

如果不小心删除了数据,并且已经commit了,那么可以利用闪回回到过去,将数据复制出来,手动恢复。

注意:闪回不能重现已经被TRUNCATE的数据。

 

下面进入历史重现——闪回的操作:

1、如果需要使用闪回功能,那么需要dba给当前用户赋予权限:

grant execute on sys.dbms_flashback to test;

 

2、假定原有一个表:table1

3、字段:ID,Name,并且存在8条数据,

4SQL> 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);

13SQL> select * from table1;
 
                                     ID NAME
--------------------------------------- ----------

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

 

14ORACLE还能够根据系统变更号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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值