承接国内外服务器租用托管、定制开发、网站代运营、网站seo优化托管接单、网站代更新,新老站点皆可!!咨询QQ:3787320601

Oracle 闪回技术详细介绍及总结

管理员 2023-06-24 07:48:44 互联网圈 15 ℃ 0 评论 11910字 收藏

Oracle 闪回技术详细介绍及总结

Oracle闪回技术详解,这里整理了4种闪回技术,对Oracle 闪回技术做一个整理总结。

 概述:

  闪回技术是Oracle强大数据库备份恢复机制的一部份,在数据库产生逻辑毛病的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成)。需要注意的是,闪回技术旨在快速恢复逻辑毛病,对物理破坏或是介质丢失的毛病,闪回技术就无法复生了,或者得借助于Oracle一些高级的备份恢复工具如RAMN去完成(这才是Oracle强大备份恢复机制的精华所在啊)

 撤消段(UNDO SEGMENT)

  在讲闪回技术前,需要先了解Oracle中一个逻辑结构–撤消段。由于大部份闪回技术都需要依赖撤消段中的撤消数据。撤消数据是反转DML语句结果所需的信息,只要某个事务修改了数据,那末更新前的原有数据就会被写入一个撤消段。(事务回滚也会用到撤消段中的数据)。事务启动时,Oracle 会为其分配一个撤消段,事务和撤消段存在多对一的关系,即一个事务只能对应一个撤消段,多个事务可以同享一个撤消段(不过在数据库正常运行时一般不会产生这类情况)。

 闪回技术

  Oracle提供了四种可供使用的闪回技术(闪回查询,闪回删除,闪回归档,闪回数据库),每种都有区别的底层体系结构支持,但其实这四种区别的闪回技术部份功能是有堆叠的,使用时也需要根据实际场景公道选择最适合的闪回功能。

   闪回查询(Flashback Query)

    a.基本闪回查询

    功能描写:可以查询过去某个时间段的数据库状态。

    工作原理:Oracle 会提取所需要的撤消数据(条件是撤消是可用的,即撤消数据还没被覆盖)进行回滚,但这类回滚是临时的,仅针对当前session可见。

    SQL> select * from  dept as of timestamp to_timestamp(‘2016-09⑴0 11:00:00′,’yyyy-mm-dd hh24:mi:ss’);

    b.闪回表

    功能描写:可将某个表回退到过去某个时间点

    工作原理:一样,Oracle会先去查询撤消段,提取过去某个时间点以后的所有变更,构造反转这些变更的SQL语句进行回退,闪回操作是一个单独的事务,所以若由于撤消数据过期之类的缘由致使没法闪回,全部操作会回滚,不会存在不一致的状态。

    步骤:

    1.启用表闪回首先要在表上支持行移动(在数据字典中设置标识来标识该操作可能会改变行ID,即同一条数据闪回成功后主键都一样,但行ID其实已产生变化了)   

    SQL> alter table emp enable row movement;

    2.闪回表操作      

    SQL> flashback table dept to timestamp to_timestamp(‘2016-09⑴0 11:00:00′,’yyyy-mm-dd hh24:mi:ss’);

    闪回表可能会失败,有可能有以下几种情况:

      违背了数据库束缚,比如用户不谨慎删除子表中的数据,现在想利用闪回表技术进行回退,恰好在这中间,父表中与该数据对应的那条记录也被删除,在这类情况下,由于违背了外键束缚,致使闪回表操作失败了;

      撤消数据失效,比如用于支持闪回操作的撤消数据被覆盖了,这类情况闪回表操作自然会失败;

      闪回不能逾越DDL,即在闪回点和当前点之间,表结构有过变更,这类情况闪回操作也会失败。

    注意:上述闪回功能都是基于撤消数据的,而撤消数据是会被重写的(Expired会被重写,Active不会被重写),所以,在需要使用这几种闪回功能去恢复数据的时候(确切地说,是需要使用基于撤消数据的闪回功能时),最短时间发现毛病,第一时间履行闪回操作,才能最大程度地保证闪回功能的成功。

   闪回删除(Flashback Drop)

  功能描写:闪回删除可以轻松将一个已被Drop的表还原回来。相应的索引,数据库束缚也会被还原(除外键束缚)

  原理描写:Drop命令实际上是Rename命令,初期的Oracle版本(10g之前),闪回删除意味着从数据字典中删除该表的所有援用,虽然表中数据可能还存在,但已成了孤魂野鬼,没法进行恢复了,10g版本以后,Drop命令则仅仅是一个Rename操作,所以恢复就很容易了。

    闪回删除操作履行命令很简单

    SQL> flashback table emp to before

  如果要还原的表名在当前系统中已被占用,也能够在闪回删除的时候对表重命名

    SQL> flashback table emp to before drop rename to emp_new

  也能够通过回收站查看当前用户那些表被删除,每一个用户都有一个回收站,这个回收站是个逻辑结构,它不是一块独立的存储空间,它存在在当前表空间内,所以如果有别的操作需要空间,比如现在需要创建一张表,没有足够空间可用,回收站中的数据就会被清算,这也是致使闪回删除失败的缘由。

    SQL> SHOW RECYCLEBIN;

  完全删除表,闪回删除也无能为力

    SQL> DROP TABLE EMP PURGE;

  清空回收站

    SQL> PURGE RECYCLEBIN;

  注意:闪回删除只针对Drop命令,注意辨别truncate操作和drop操作,truncate称为表截断,会清空表中数据(调理Oracle高水位线实现),表结构不受影响,速度很快,弊端是此进程不会产生任何撤消数据或是重做日志,如果误删,恢复异常麻烦,要慎重使用。而Drop则会删除数据+表结构,闪回删除仅针对Drop操作。

   闪回数据归档(Flashback Data Archive )

   功能描写:闪回数据归档可以使表具有回退到过去任什么时候间点的能力,前面提到的闪回查询,闪回表都会受限于撤消数据会不会失效,如果撤消数据被覆盖重写了,闪回操作自然会失败,闪回删除则受限于表空间会不会有足够可用空间,而闪回数据归档,则没有这些限制。

   创建闪回归档

   1.创建一个用户闪回数据归档的表空间,固然,也能够使用已存在的表空间。

    SQL> create tablespace test_tb datafile ‘test.dbf’ size 20m;

   2.创建一个保存时间为2年的闪回归档

     SQL> create flashback archive test_fa tablespace test_tb retention 2 year;   

    为scott用户下的emp表启用闪回归档

   1.赋予用户归档的权限

     SQL> grant flashback archive on test_fa to scott;

    2.连接用户

     SQL> conn scott/tiger;

    3.为emp表启用闪回归档

     SQL> alter table emp flashback archive test_fa;

  至此,emp表就具有了可以查询或回退到过去2年任意时间点的能力!

   闪回数据库(Flashback Database)

   功能描写:闪回数据库可将全部数据库回退到过去某个时间点,闪回表是某张表的时空穿梭,闪回数据库则是全部数据库的时空穿梭。固然,闪回点以后的所有工作就丢失了,其实就相当于数据库的不完全恢复,所以只能以resetlogs模式打开数据库。闪回数据库会造成停机时间,固然相比于传统备份恢复机制,恢复进程会快很多。

   工作原理:闪回数据库不使用撤消数据,使用另外一种机制来保存回退所需要的恢复数据,当启用闪回数据库,产生变化的数据块会不断从数据库缓冲区缓存中复制到闪回缓冲区,然后,称为恢复写入器(Recovery Writer)的后台进程会将这些数据刷新到磁盘中的闪回日志文件中。闪回的进程,则是一个 提取闪回日志–>将块映像复制回数据文件 的进程。

   配置闪回数据库(闪回数据库要求数据库为归档模式)

    1.指定闪回恢复区,也就是寄存闪回日志的位置,但闪回恢复区不单单是为了寄存闪回日志,Oracle的很多备份恢复技术都用到这个区域,比如控制文件的自动备份等都会寄存到此区域。

   SQL> alter system set db_recovery_file_dest =’/flash_recovery_area’;

     2.指定恢复区大小

   SQL> alter system set db_recovery_file_dest_size=4G;

    3.指定闪回日志保存时间为2小时,即通过闪回操作,可以将数据库回退到前两小时内的任意时间点

   SQL> alter system set db_flashback_retention_target=120;

    4.有序关闭数据库–mount模式下启用闪回数据库–打开数据库  

 SQL> shutdown immediate;

   SQL> startup mount;

   SQL> alter database flashback on;

   SQL> alter database open;

  至此,闪回数据库配置完成!

     使用闪回数据库功能  

 SQL> shutdown immediate;

   SQL> startup mount;

   SQL> flashback database to timestamp sysdate⑹0/1440;

   SQL> alter database open resetlogs;

 总结

  本文罗列了四类闪回技术,其中,闪回查询,包括基本闪回查询,闪回表等技术都依赖于撤消数据(还有一类闪回技术为闪回事务,可以对指定事务进行闪回操作,原理类似,借助于撤消数据来构建用于反转事务的SQL语句),依赖于撤消数据,则自然受限于撤消数据的保存时间,可能会由于撤消数据被覆写而致使闪回失败。闪回删除,则是由于10g版本后对表的删除仅表现为一个rename操作,引入回收站的概念,但此回收站仅是当前表空间的一块逻辑划分,所以会受限于当前表空间的可用空间的限制;闪回归档可提供查询或回退到过去任意时间点的功能,闪回数据库则是一中更极真个数据库恢复功能,相当于不完全恢复,依赖于闪回日志。

感谢浏览,希望能帮助到大家,谢谢大家对本站的支持!

文章来源:丸子建站

文章标题:Oracle 闪回技术详细介绍及总结

https://www.wanzijz.com/view/58870.html

X

截屏,微信识别二维码

微信号:weimawl

(点击微信号复制,添加好友)

打开微信