ITPub博客

首页 > 数据库 > Oracle > oracle 闪回技术

oracle 闪回技术

原创 Oracle 作者:s相濡以沫y 时间:2018-12-17 08:44:58 0 删除 编辑

基本闪回查询

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操作,引入回收站的概念,但此回收站仅是当前表空间的一块逻辑划分,所以会受限于当前表空间的可用空间的限制;闪回归档可提供查询或回退到过去任意时间点的功能,闪回数据库则是一中更极端的数据库恢复功能,相当于不完整恢复,依赖于闪回日志。


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

请登录后发表评论 登录
全部评论

注册时间:2018-11-20

  • 博文量
    28
  • 访问量
    39457