闪回

闪回
闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成)。需要注意的是, 闪回技术旨在快速恢复逻辑错误,对于物理损坏或是介质丢失的错误,闪回技术就回天乏术了,还是得借助于Oracle一些高级的备份恢复工具如RAMN去完成(这才是Oracle强大备份恢复机制的精髓所在啊)
基本闪回查询
SYS@VDEDU> select * from scott.dept as of timestamp to_timestamp ('2018-07-26 13:20:00','yyyy-mm-dd hh24:mi:ss');
闪回表:可将某个表回退到过去某个时间点
Oracle会先去查询撤销段,提取过去某个时间点之后的所有变更,构造反转这些变更的SQL语句进行回退,闪回操作是一个单独的事务,所以若由于撤销数据过期之类的原因导致无法闪回,整个操作会回滚,不会存在不一致的状态。
命令:
SYS@VDEDU> alter table scott.emp enable row movement; #启用表闪回首先要在表上支持行移动(在数据字典中设置标识来标识该操作可能会改变行ID,即同一条数据闪回成功后主键都一样,但行ID其实已经发生变化了)#
SYS@VDEDU> flashback table scott.emp to timestamp to_timestamp ('2018-07-26 15:00:00','yyyy-mm-dd hh24:mi:ss'); #闪回表#
闪回表可能会失败,有可能有以下几种情况:
违反了数据库约束,比如用户不小心删除了子表中的数据,现在想利用闪回表技术进行回退,恰好在这中间,父表中与该数据对应的那条记录也被删除了,在这种情况下,由于违反了外键约束,导致闪回表操作失败了;
撤销数据失效,比如用于支撑闪回操作的撤销数据被覆盖了,这种情况闪回表操作自然会失败;
闪回不能跨越DDL,即在闪回点和当前点之间,表结构有过变更,这种情况闪回操作也会失败。
注意:上述闪回功能都是基于撤销数据的,而撤销数据是会被重写的(Expired会被重写,Active不会被重写),所以,在需要使用这几种闪回功能去恢复数据的时候(确切地说,是需要使用基于撤销数据的闪回功能时),最短时间发现错误,第一时间执行闪回操作,才能最大程度地保证闪回功能的成功。
闪回删除:必须是回收站中有
命令:
SYS@VDEDU> flashback table scott.emp to before drop;#闪回回收站中的表#
SYS@VDEDU> flashback table scott.emp to before drop rename to emp_new;#闪回并改名#
闪回数据归档
闪回数据归档可使表具有回退到过去任何时间点的能力,前面提到的闪回查询,闪回表都会受限于撤销数据是否失效,如果撤销数据被覆盖重写了,闪回操作自然会失败,闪回删除则受限于表空间是否有足够可用空间,而闪回数据归档,则没有这些限制。
命令:
SYS@VDEDU> create tablespace flash01 datafile '/u01/app/oracle/oradata/VDEDU/flash01.dbf' size 100m autoextend on; #创建表空间#
SYS@VDEDU> create flashback archive flash01_fa tablespace flash01 retention 2 year; #创建2年的闪回归档#
SYS@VDEDU> grant flashback archive on flash01_fa to scott; #授予scott用户闪回归档权限#
SYS@VDEDU> conn scott/oracle
SCOTT@VDEDU> alter table emp flashback archive flash01_fa; #为emp表启用闪回归档#
闪回数据库
闪回数据库可将整个数据库回退到过去某个时间点,闪回表是某张表的时空穿梭,闪回数据库则是整个数据库的时空穿梭。当然,闪回点之后的所有工作就丢失了,其实就相当于数据库的不完整恢复,所以只能以resetlogs模式打开数据库。闪回数据库会造成停机时间,当然相比于传统备份恢复机制,恢复过程会快很多。
闪回数据库不使用撤销数据,使用另外一种机制来保留回退所需要的恢复数据,当启用闪回数据库,发生变化的数据块会不断从数据库缓冲区缓存中复制到闪回缓冲区,然后,称为恢复写入器(Recovery Writer)的后台进程会将这些数据刷新到磁盘中的闪回日志文件中。闪回的过程,则是一个 提取闪回日志-->将块映像复制回数据文件 的过程。
命令:
SYS@VDEDU> show parameter db_re; #查看快速恢复区配置信息##由上自下分别为快速恢复区 目录、大小、闪回日志保留时间#
SYS@VDEDU> alter database archivelog; #开启归档模式。
SYS@VDEDU> alter database flashback on; #开启闪回(在mount状态下)
SYS@VDEDU> flashback database to timestamp sysdate-60/1440(闪回到系统时间之前的时间); #使用闪回进行数据库恢复(在mount状态下)#
SYS@VDEDU> alter database open resetlogs;
其中,闪回查询,包括基本闪回查询,闪回表等技术都依赖于撤销数据(还有一类闪回技术为闪回事务,可以对指定事务进行闪回操作,原理类似,借助于撤销数据来构建用于反转事务的SQL语句),依赖于撤销数据,则自然受限于撤销数据的保留时间,可能会由于撤销数据被覆写而导致闪回失败。闪回删除,则是由于10g版本后对表的删除仅表现为一个rename操作,引入回收站的概念,但此回收站仅是当前表空间的一块逻辑划分,所以会受限于当前表空间的可用空间的限制;闪回归档可提供查询或回退到过去任意时间点的功能,闪回数据库则是一中更极端的数据库恢复功能,相当于不完整恢复,依赖于闪回日志。

猜你喜欢

转载自www.cnblogs.com/lswei/p/9623253.html