知识大全 用Oracle闪回功能恢复偶然丢失的数据

Posted 操作

篇首语:要让事情改变,先改变自己;要让事情变得更好,先让自己变得更强。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用Oracle闪回功能恢复偶然丢失的数据相关的知识,希望对你有一定的参考价值。

用Oracle闪回功能恢复偶然丢失的数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   引言    人为的错误是数据库系统失败的重要原因之一 根据调查约 %的系统问题是操作失误或者用户错误引起的 这些人为的错误又特别难以避免 传统上当发生数据丢失 数据错误问题时 解决的主要方法就是数据的导入/导出 备份/恢复技术 这些方法都需要发生数据错误之前有一个正确的备份 才能进行恢复 恢复时不取决于错误程度 而只取决于备份/恢复策略 这种方法既耗时又使数据库系统不能提供服务 对于一些用户偶然地删除数据这类小错误来说显得有些 大材小用 那么如何来恢复这种偶然的错误操作造成的数据丢失呢?从Oracle i开始提供了基于回滚段的闪回查询(Flashback Query)功能 可用于恢复错误的DML操作 在Oracle g中对闪回查询做了较大改进 不再局限于闪回查询 还可用于恢复错误的DDL(Drop)操作 闪回表 闪回数据库等      Oracle i的闪回查询概述     Oracle i的闪回查询功能    在Oracle i之前 如果用户错误操作数据后 除了不完全恢复外 没有好的解决办法 Oracle i中提供闪回查询 由一个新的包DBMS_FLASH来实现 用户使用闪回查询可以及时取得误操作DML(Delete Update Insert)前某一时间点数据库的映像视图 用户可以利用系统时间或系统改变号(SCN System Change Number)来指定这个只读视图 并可以针对错误进行相应的恢复措施 闪回查询功能完全依赖于自动回滚段管理(AUM) 对于Drop等误操作不能恢复 闪回特性可应用在以下方面     ( )自我维护过程中的修复 当一些重要的记录被意外删除 用户可以向后移动到一个时间点 查看丢失的行并把它们重新插入现在的表内恢复     ( )恢复Email和声音Email 当用户意外删除了Email或者声音信息时 可以通过移回到固定时间点来恢复删除     ( )账号平衡状况 可以查看以前的历史数据 如银行外币管理中用于记录特定时间的汇率 在以前 汇率变更被记录在一个历史表中 现在就可以通过闪回功能进行查询     ( )用于趋势分析的决策支持系统 决策支持系统和联机分析应用必须执行一个长时间的事务 使用闪回查询 这些应用可以对历史数据执行分析和建模 例如 特定产品如矿泉水随季节变化需求情况的变化      回滚段概述    回滚段用于存放数据修改之前的位置和值 回滚段的头部包含正在使用的该回滚段事务的信息 回滚段的作用如下     ( )事务回滚 当事务修改表中数据的时候 该数据修改前的值(即前影像)会存放在回滚段中 当用户回滚事务时 Oracle将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值     ( )事务恢复 当事务正在处理的时候 例程失败 回滚段的信息保存在重做日志文件中 Oracle将在下次打开数据库时利用回滚来恢复未提交的数据     ( )读一致性 当一个会话正在修改数据时 其它的会话将看不到该会话未提交的修改 而且 当一个语句正在执行时 该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)      Oracle中Delete和Commit操作的流程分析    ( )删除(Delete)流程    ·Oracle读Block(数据块)到Buffer Cache(缓冲区)(如果该Block在Buffer中不存在)     ·在Redo Log Buffer(重做日志缓冲区)中记录Delete操作的细节     ·在相应回滚段段头的事物表中创建一个Undo(回滚)条目     ·把将要删除的记录创建前镜像 存放到Undo Block(回滚块)中     ·在Buffer Cache中的相应数据块上删除记录 并且标记相应的数据块为Dirty(脏)     ( )提交(Commit)流程    ·Oracle产生一个SCN     ·在回滚段事物表中标记该事物状态为Commited     ·LGWR(日志读写进程) Flush Log Buffer到日志文件     ·如果此时数据块仍然在Buffer Cache中 那么SCN将被记录到Block Header上 这被称为快速提交     ·如果Dirty Block已经被写回到磁盘 那么下一个访问这个Block的进程将会自回滚段中获取该事物的状态 确认该事物被提交 然后这个进程获得提交SCN并写回到Block Header上 这被称为延迟块清除      Oracle i中闪回查询操作实例    进行闪回查询必须设置自动回滚段管理 在init ora设置参数UNDO_MANAGEMENT=AUTO 参数UNDO_RETENTION=n 决定了能往前闪回的最大时间 值越大就需要越多Undo空间     例 Oracle i的Flashback Query操作     ( )创建闪回查询用户    SQL> create user flashtest identified by flashtest;  SQL> grant connect resource to flashtest;  SQL> grant execute on dbms_flashback to flashtest;  SQL> connect flashtest/flashtest;    ( )创建测试表 插入测试记录    SQL> create table test(id number( ));  SQL> insert into test values ( );  SQL> insert into test values( );  SQL> mit;  SQL> create table rec_date(date_scn);    注意 在执行步骤 或者步骤 之前 等待 分钟     ( )删除记录    SQL> execute dbms_flashback disable;  SQL> insert into rec_date select sysdate from dual;  SQL> mit;  SQL> delete from test where id= ;  SQL> mit;    通过以上的操作 我们插入了两条记录 并删除了其中一条记录 在以下的操作中 我们将通过flashback query找到删除的记录    ( )闪回查询    SQL> DECLARE  Restore_scn date;  BEGIN  Select date_scn into restore_scn from rec_date;  Dbms_flashback enable_at_time (restore_scn);  END;  SQL> select * from test;  ID          可以看出 虽然删除记录并提交 但是通过闪回操作 仍能查询到删除前的两条记录 需要注意Oracle每 分钟记录一次SCN 并将SCN和对应时间的映射进行纪录 如果原来插入的记录到做闪回操作的时间在 分钟之内 用基于时间的闪回查询可能得不到记录 因为基于时间点的查询实际上是转化为最近的一次SCN 然后从这个SCN开始进行恢复 因此 如果需要精确的查询可以采用基于SCN的闪回查询 可精确闪回到需要恢复的时间 可以通过DBMS_FLASHBACK GET_SYSTEM_CHANGE_NUMBER语句获取SCN      Oracle g的闪回查询概述    与Oracle i相比Oracle g的Flashback有了非常大的改进 从普通的Flashback Query发展到了多种形式 主要表现在如下几方面新特性      Flashback Database    Oracle Flashback Database特性允许通过SQL语句Flashback Database语句 让数据库前滚到当前的前一个时间点或者SCN 而不需要做时间点的恢复 闪回数据库可以迅速将数据库回到误操作或人为错误的前一个时间点 如Word中的 撤消 操作 可以不利用备份就快速的实现基于时间点的恢复 Oracle通过创建新的Flashback Logs(闪回日志) 记录数据库的闪回操作 如果希望能闪回数据库 需要设置如下参数 DB_RECOVER_FILE_DEST日志的存放位置 DB_RECOVER_FILE_DEST_SIZE恢复区的大小 在创建数据库的时候 Oracle将自动创建恢复区 但默认是关闭的 需要执行alter database flashback on命令     例 执行Flashback Database命令格式     SQL>flashback database to time to_timestamp(xxx);  SQL>flashback database to scn xxx     Flashback Table    Oracle Flashback Table特性允许利用Flashback Table语句 确保闪回到表的前一个时间点 与Oracle i中的Flashback Query相似 利用回滚段信息来恢复一个或一些表到以前的一个时间点(一个快照) 要注意的是 Flashback Table不等于Flashback Query Flashback Query仅仅是查询以前的一个快照点而已 并不改变当前表的状态 而Flashback Table将改变当前表及附属对象一起回到以前的时间点     语法     flashback table tablename to timestamp xxx或  flashback table tablename to scn xxx    注意 如果需要闪回一个表 需要以下条件     ·需要有flashback any table的系统权限或者是该表的flashback对象权限     ·需要有该表的select insert delete alter权限     ·必须保证该表row movement     例 执行将test表闪回到 年 月 日下午 点     SQL>flashback table test to timestamp to_timestamp( : : yyyy mm dd hh :mi:ss );     Flashback Drop    Oracle Flashback Drop特性提供一个类似回收站的功能 用来恢复不小心被删除的表 当删除表时 Oracle g并不立刻释放被删除的表所占用的空间 而是将这个被删除的表进行自动重命名(为了避免同类对象名称的重复)并放进回收站中 所谓的回收站类似于Windows系统中的回收站 是一个虚拟的容器 用于存放所有被删除的对象 在回收站中被删除的对象将占用创建时的同样的空间 如果这个被删除的表需要进行恢复 就可利用Flashback Drop功能     例 进行一个删除表后恢复的简单测试     ( )显示回收站信息    SQL>show recyclebin;    可以看到 回收站中是没有任何 cha138/Article/program/Oracle/201311/18545

相关参考

知识大全 Oracle10g数据库中闪回表特性剖析

Oracle10g数据库中闪回表特性剖析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Orac

知识大全 oracle配置归档模式

  非归档  数据能恢复到最后一次备份  只能做全部恢复不能做部分恢复  只能脱机备份  归档  数据能恢复到失败点无数据丢失  可以热备份  完全恢复和部分恢复都行部分恢复文件中不一致的检查点可以用

知识大全 丢失归档日志文件后数据库应当如何恢复[2]

  这里是Oracle使用其硬线路的位置由于转储的数据文件不能恢复到与其他文件一致的位置所以可能存在中断的数据并且Oracle不允许正常打开数据库  第步设置未文档化的实例参数并打开数据库  在初始化

知识大全 如何恢复一个丢失的数据文件

  如果您目前拥有一个冷备份但是缺少了其中的一个数据文件但你目前存在所有的归档如果您要恢复数据文件可以参考以下的示例  [oracle@jumpereygle]$sqlplus/assysdba  S

知识大全 Oracle10G启用闪回功能

Oracle10G启用闪回功能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  [oracle@l

知识大全 Oracle数据库Redo故障恢复

Oracle数据库Redo故障恢复  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一丢失inac

知识大全 技巧:Oracle数据库Redo故障恢复

技巧:Oracle数据库Redo故障恢复  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一丢失i

知识大全 Oracle重做日志文件损坏或丢失后的恢复

Oracle重做日志文件损坏或丢失后的恢复  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  很多网

知识大全 丢失归档日志文件后数据库应当如何恢复[1]

  本文主要介绍了如何从一个不能正常打开的数据库(由于一个/多个数据库文件与其他文件不一致)中提取数据的具体示例详细内容请大家参考下文  具体案例  一个磁盘损坏了并且丢失了一个数据库文件从一周前的热

知识大全 无备份丢失部分数据文件和控制文件恢复

  前提:         需要有除丢失文件以外其他文件的备份       &n