您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 第16章Oracle闪回(Flashback)技术
第1页第十六章Oracle闪回(Flashback)技术本章概述主要内容第2页本章概述为了使Oracle数据库从任何逻辑误操作中迅速恢复,Oracle数据库提供了一系列人为错误更正技术,称为闪回。使用闪回(Flashback)技术可以实现基于磁盘上闪回恢复区的自动备份与恢复。本章介绍与数据库闪回相关的知识。闪回技术从oracle9i版本的闪回查询开始,在Oracle10g版本中系统地使用,Oracle11g版本中进行了加强。第3页主要内容16.1闪回技术概述16.2闪回数据库16.3闪回表16.4闪回查询16.5闪回版本查询16.6闪回事务查询16.7闪回丢弃16.8小结第4页16.1闪回技术概述为了使Oracle数据库从任何逻辑误操作中迅速恢复,Oracle数据库提供了一系列人为错误更正技术,称为闪回。传统上,从人为错误中恢复数据库唯一的办法就是采用用户管理的备份和恢复技术。而闪回技术提供了从逻辑错误中恢复的更有效和更快的方法,多数情况下,在用这种技术进行恢复时数据库仍然联机并对用户可用。此外,闪回技术允许选择性地复原某些对象。在Oracle11g中,闪回技术包括以下方面:闪回数据库(FlashbackDatabase):允许用户通过FlashbackDatabase语句,使数据库迅速地回滚到以前的某个时间点或某个SCN(系统更改号)值时的状态。闪回丢弃(FlashbackDrop):类似于操作系统的垃圾回收站功能,可以从中恢复被drop的表或索引。该功能基于撤销数据。第5页闪回查询(FlashbackQuery):查询过去某个时间点或者某个SCN值时表中的数据信息。闪回版本查询(FlashbackVersionQuary):查询过去某个时间段或某个SCN段内表中数据的变化情况。闪回事务查询(FlashbackTransactionQuery):查看某个事务或所有事务在过去一段时间对数据进行的修改。闪回表(FlashbackTable):将表恢复到过去的某个时间点或某个SCN值时的状态。闪回技术最大的特点是实现自动备份与恢复,大大减小了管理开销。当Oracle数据库发生人为故障时,不需要事先备份数据库,就可以利用闪回技术快速而方便地进行恢复。为了使用数据库的闪回技术,必须启用撤销表空间自动管理回滚信息。如果要使用闪回删除技术和闪回数据库技术,还需要启用回收站、闪回恢复区。第6页主要内容16.1闪回技术概述16.2闪回数据库16.3闪回表16.4闪回查询16.5闪回版本查询16.6闪回事务查询16.7闪回丢弃16.8小结第7页16.2闪回数据库闪回数据库能够使数据库迅速回滚到以前的某个时间点或者某个SCN(系统更改号)上。这是大多数逻辑损害时恢复数据库的最佳选择。Oracle系统为了使用数据库的闪回功能,特别创建了另外一组日志,就是Flashback_logs(闪回日志),记录数据库的闪回操作。因为恢复不再受数据库大小的影响,使用闪回数据库恢复比用传统的恢复方法要快得多。也就是说,传统的恢复时间(MTTR)是由所需重建的数据文件的大小和所要应用的归档日志的大小决定的。而使用闪回数据库,恢复时间是由恢复过程中需要备份的变化的数量决定的,而不是数据文件和归档日志的大小。第8页闪回数据库的结构是由恢复写入器(RVWR)后台进程和闪回数据库日志组成的。如果要启动闪回数据库功能,RVWR进程也要启动。闪回数据库日志是一种新的日志文件类型,它包括物理数据块先前的“图像”。闪回恢复区是闪回数据库的先决条件,因为RVWR进程要将闪回日志写入该区域中,所以在使用闪回数据库功能时,必须首先配置闪回恢复区。Oracle11g的FLASHBACK命令可以对表级进行恢复,也可以对数据库级进行恢复。要对数据库级进行恢复,就要用到FLASHBACKDATABASE命令,语法格式如下:FLASHBACK[STANDBY]DATABASEdatabase{TO[SCN|TIMESTAMP]exp|TOBEFORE[SCN|TIMESTAMP]exp}第9页其中参数说明如下:lSTANDBY:指定恢复备用的数据库到某个SCN或者某个时间点上。如果没有备用数据库,则系统会返回一个错误。如果省略STANDBY子项,则数据库可能是主数据库,也可能是备用数据库。lTOSCNexp:指定一个系统改变号SCN。lTOBEFORESCNexp:恢复到之前的SCN。lTOTIMESTAMP:需要恢复的时间表达式。lTOBEFORETIMESTAMP:恢复数据库到之前的时间表达式。用户可以从sysdate中得到系统的当前时间。当用户发出FLASHBACKDATABASE语句之后,数据库会首先检查所需要的归档文件与联机重建日志文件的可用性。如果可用,则会将数据库恢复到指定的SCN或者时间点上。第10页在数据库中闪回数据库的总数和大小由DB_FLASHBACK_RETENTION_TARGET初始化参数控制。可通过查询V$FLASHBACK_DATABASE_LOG视图来确定能恢复到过去多远。如果数据库中所保留的数据不够执行恢复,可使用标准的恢复过程恢复到过去的某个时间点上。如果数据文件集没有保留足够的数据,则数据库会返回一个错误,在这种情况下,可先使用数据文件脱机,然后再发出语句恢复剩余的部分,最后再用标准方法恢复这些脱机的数据文件。第11页主要内容16.1闪回技术概述16.2闪回数据库16.3闪回表16.4闪回查询16.5闪回版本查询16.6闪回事务查询16.7闪回丢弃16.8小结第12页16.3闪回表闪回表是将表恢复到过去的某个时间点的状态,为DBA提供了一种在线、快速、便捷地恢复对表进行的修改、删除、插入等错误的操作,可以讲指定表中的数据、索引、触发器等恢复到指定的时间点。Oracle11g的FlashbackTable有以下特性。*在线操作。*恢复到指定时间点或者SCN的任何数据。*自动恢复相关属性,如索引、触发器。*满足分布式的一致性。*满足数据一致性,所有相关对象将自动一致。*闪回表技术是基于撤销数据(undodata)来实现的,因此要想闪回到过去的某个时间点上,必须确保与撤销表空间有关的参数设置合理。与撤销表空间相关参数有undo_management、undo_tablespace和undo_retention。第13页使用FLASHBACKTABLE语句可以对表进行闪回操作,语法如下:FLASHBACKTABLE[schema.]tableTOSCN|TIMESTAMPexpression[ENABLE|DISABLETRIGGERS]其中参数说明如下:SCN:将表恢复到指定的SCN时的状态。TIMESTAMP:将表恢复到指定的时间点。ENABLE|DISABLETRIGGER:恢复后是否直接启用触发器。需要注意的是,如果需要FLASHBACK一个表,则需要保证如下几个方面:具备FLASHBACKANYTABLE的系统权限或者是该表的FLASHBACK对象权限;有该表的SELECT、INSERT、DELETE和ALTER权限;必须保证该表ROWMOVEMENT。第14页【例16-1】删除闪回表。SQLsettimeonSQLcreatetablehr.mydep1asselect*fromhr.department;SQLdeletefromhr.mydep1wheredepartment_id=10;SQLflashbacktablehr.mydep1totimestamp2totimestamp(to_tate(‘2012-04-0310:00:00’,‘yyyy-mm-ddhh24:mi:ss’));第15页主要内容16.1闪回技术概述16.2闪回数据库16.3闪回表16.4闪回查询16.5闪回版本查询16.6闪回事务查询16.7闪回丢弃16.8小结第16页16.4闪回查询闪回查询是Oracle9i提出的概念,指利用数据库回滚段存放的信息查看指定表中过去某个时间点的数据信息,或过去某个时间段数据的变化情况,或某个事务对该表的操作信息等。使用闪回查询可以找到发生误操作前的数据情况,为恢复数据库提供依据。要实现闪回查询,必须将初始化参数UNDO_MANAGEMENT设置为AUTO,这是此参数的默认值。初始化参数UNDO_RETENTION决定了能往前闪回查询的最大时间,值越大可以往前闪回查询的最大时间越长,但占用的磁盘空间也越大。第17页闪回查询的SELECT语句的语法格式为:SELECTcolumn_name[,…]FROMtable_name[ASOFSCN|TIMESTAMPexpression][WHEREcondition]可以基于ASOFTIMESTAMP的闪回查询,也可以基于ASOFSCN的闪回查询。其实Oracle在内部都是使用SCN的,即使指定的是ASOFTIMESTAMP,Oracle也会将其转换成SCN。系统时间与SCN之间的对应关系可以通过查询SYS模式下的SMON_SCN_TIME表获得。第18页例如:SQLsettimeon创建示例表:SQLcreatetablehr.mydep4asselect*fromhr.departments;删除记录:SQLdeletefromhr.mydep4wheredepartment_id=300;SQLcommit;使用select查询不到刚才删除的记录,但使用闪回查询可以找到:SQLselect*fromhr.mydep4asoftimestamp2totimestamp(to_date(‘2012-3-2810:30:00’,‘yyyy-mm-ddhh24:mi:ss’))3Wheredepartment_id=300;第19页主要内容16.1闪回技术概述16.2闪回数据库16.3闪回表16.4闪回查询16.5闪回版本查询16.6闪回事务查询16.7闪回丢弃16.8小结第20页16.5闪回版本查询Oracle的闪回版本查询功能(FlashbackVersionQuery)提供了一个审计行改变的查询功能,它能找到所有已经提交了的行的记录。借助这个特殊功能,我们可以查看一行记录在一段时间内的变化情况,即一行记录的多个提交的版本信息,从而实现数据的行级恢复。使用该功能,可以轻松实现对应用系统进行审计,而没有必要使用细粒度的审计功能或者是使用LOGMNR了。语法格式为:SELECTcolumn_name[,…]FROMtable_name[VERSIONSBETWEENSCN|TIMESTAMPMINVALUE|expressionANDMAXVALUE|expression][ASOFSCN|TIMESTAMPexpression]WHEREcondition第21页参数说明如下:VERSIONSBETWEEN:用于指定闪回版本查询时的时间段或SCN段;ASOF:表示恢复单个版本;TIMESTAMP:表示时间。在进行闪回版本查询时,可以同时使用VERSIONS短语和ASOF短语。ASOF短语决定了进行查询的时间点或SCN,VERSIONS短语决定了可见的行的版本信息。对于在VERSIONSBETWEEN下界之前开始的事务,或在ASOF指定的时间或SCN之后完成的事务,系统返回的版本信息为NULL。第22页【例16-2】创建一个读者信息表。SQLcreatetablereader(idVarchar2(10),nameVarchar2(20));插入一条记录:SQLinsertintoreadervalues(‘13100110’,‘zs’);更新表中数据:SQLupdatereadersetid=’13100101’wherename=’zs’;提交:SQLcommit;使用闪回版本查询:SQLselectversions_starttime,versions_operation,id,name2fromreaderve
本文标题:第16章Oracle闪回(Flashback)技术
链接地址:https://www.777doc.com/doc-14293 .html