
1 如果有完整的归档,有全备,可以执行不完全恢复,恢复到昨天的数据;
2 如果有完整的归档,没有备份文件,但是数据库开启闪回数据库功能(版本高于9i),可以闪回数 据库到昨天的数据;
3 如果有完整的归档,没有备份,数据库版本低于或等于9i,则很难不完全恢复到昨天的数据;
多项研究表明,40% 的应用程序故障都是由 *** 作员或用户的错误造成的。人非圣贤,孰能无过?但是,这些错误很难避免,而且在没有事先规划和使用正确技术的情况下尤其难以恢复。这样的错误会导致“逻辑”数据损坏,或者导致 IT 基础架构的一个或多个组件停止运行。纠正个别组件的错误相对来说简单,而检测并纠正逻辑数据的损坏,例如意外删除了有价值的数据时,所耗费的 *** 作将导致业务产出的巨大损失。典型的用户错误可能包括意外删除了有价值的数据,错误删除了数据和错误删除了表。避免人为错误Oracle 数据库体系结构利用了人为错误数据库恢复领域独有的技术进展。Oracle 闪回技术提供了一组新特性,可及时查看数据并在时间上前后滚动数据。使用闪回特性,可以查询历史数据、执行更改分析,以及执行自助修复,以便在数据库联机时从逻辑损坏中恢复。利用 Oracle 闪回技术,您完全可以撤销过去的 *** 作!Oracle9i 引入了闪回查询,从而提供了可从人为错误中恢复的简单、强大和全面的非破坏性机制。它允许用户查看过去某个时间点的数据状态,而无需更改任何数据库结构。 Oracle 数据库 10g 扩展了闪回技术,提供了基于数据库、表、行和事务级别的快速、方便的恢复。闪回技术使恢复过程实现了革命性变化,您只需对更改的数据进行 *** 作。现在,错误恢复所需的时间就相当于错误发生的时间。Oracle 10g 闪回技术包括闪回数据库、闪回表、闪回删除、闪回版本查询以及闪回事务查询。 可以轻松地利用闪回技术进行非修复性 *** 作,如使用闪回查询进行历史审计、利用闪回数据库撤销测试更改。Oracle 数据库 11g 引进了一个创新的方法,使用闪回数据存档来管理和查询长期的历史数据。该版本还提供了简单的一步式事务撤销 *** 作,实现了新的闪回事务功能。 Oracle 数据库 11g 中的新特性闪回数据存档 闪回数据存档能够以高度的应用程序透明性、安全性及高效的方式自动跟踪和维护对所有 Oracle 数据的历史更改。作为 Oracle Total Recall 选件的组成部分,闪回数据存档为企业提供了快速、集中和极其高效的解决方案,以满足管理所有历史数据的需要。闪回数据存档自动跟踪对数据库中所存储数据的每个更改,同时维护一个安全、高效和易于访问的历史数据存档。捕获的历史数据可以根据业务需要保存任意长的时间,并且可以使用闪回 SQL 查询方便地进行访问。在现有表和新建表上均可立即启用历史数据跟踪,更重要的是,以一种完全应用程序透明的方式进行跟踪。 闪回数据存档提供了一个高性能的、存储优化的、具有集中管理界面的解决方案,可以满足组织对数据保留和更改控制的需求。使用闪回数据存档进行历史数据跟踪的主要好处包括: 应用程序透明: 在应用程序没有更改或更改很小的情况下,可以在一个或多个表上立即启用历史数据捕获。因此,客户可以使用该特性捕获打包应用程序以及自行开发的应用程序的历史数据。 无缝访问: 可以使用熟悉的闪回 SQL 结构轻松访问历史数据。闪回数据存档包括对闪回查询的支持。应用程序可以及时无缝地查询不同时间点的表历史数据。无需拍摄特殊快照既可利用该特性。 安全性: 历史数据一旦生成,任何用户都不能进行修改。这就实现了即取即用,而无需特殊或额外的设置。对内部历史表的访问限制为只读。不允许用户(包括管理员)进行 DML *** 作。由于通过闪回查询机制提供了无缝访问,因此应用程序无需直接查询内部历史表。 最小的性能开销: 常规用户事务几乎没有影响。闪回数据存档采用轻型机制来标记要存档的跟踪表上的 DML *** 作。通过稍后介绍的后台进程异步生成实际历史记录并进行存档。 存储优化: 在内部对历史数据进行分区和高度压缩,以减少占用的存储空间。闪回数据存档采用高效的压缩模式来压缩内部历史表。此外,它还依据范围分区模式对内部历史表进行自动分区。闪回数据存档中的压缩和分区都是自动管理的,无需特殊管理。 集中管理: 闪回数据存档提供了一个基于策略的集中管理界面,实现了大量正在进行中的管理任务自动化。使用闪回数据存档,可以方便地对表进行分组并设置常规保留策略。新表将从所在的闪回数据存档中自动继承保留参数。Oracle 将根据指定的保留策略自动清除所有跟踪表中过期的历史数据。这就可以将管理员从重复的历史数据管理中解放出来,避免了与人工维护有关的成本高昂的错误(如,错误清除了历史数据)。 闪回事务大型数据库应用程序依赖复杂的事务序列,以确保一组插入、更新或删除的原子性和一致性。如果出现一个“问题”事务,管理员必须向前追溯,了解哪些更改受该事务的影响并确定任何依赖关系(例如,“问题”事务之后修改了相同数据的事务),从而确保撤销该事务,保留原始的、好的数据状态和任何相关数据。执行这种事务分析可能很费力,尤其对非常复杂的应用程序。通过闪回事务,使用一个 PL/SQL *** 作即可实现单个事务(还可以包含它依赖的所有事务)的闪回,或者使用直观的 EM 向导来识别并闪回有问题的事务。闪回事务依赖于给定事务及其相关事务的撤销数据和存档重做日志的可用性,以便撤销更改。Oracle 数据库 10g 第 2 版中的新特性恢复点当需要进行 Oracle 数据库时间点恢复 *** 作时,DBA 必须确定数据必须回滚到的时间或 SCN。Oracle 数据库 10g 第 2 版用恢复点简化了时间点恢复。恢复点是用户定义的一个名称,与闪回数据库、闪回表和恢复管理器 (RMAN) 结合使用时可以代替 SCN 或时钟时间,可以通过企业管理器或者用 SQLPlus 或 RMAN 以命令行方式创建。使用恢复点,无需调查事务的 SCN 或时间,使用户能够收藏数据库事务事件。有保证的恢复点确保了始终维护足够的闪回日志,以便返回到恢复点。这意味着快速恢复区将不删除闪回日志,除非当前的保证恢复点不再需要这些日志。可在进行主要数据库更改(如数据库批处理作业或模式升级)之前创建这些特殊恢复点,从而可在需要撤销更改时使用这些恢复点进行闪回。通过RESETLOGS 闪回数据库通过RESETLOGS 闪回数据库使 RESETLOGS *** 作之前创建的闪回日志可用于闪回数据库 *** 作。在 Oracle 数据库 10g 第 2 版中,使用 RESETLOGS 打开数据库后即保留闪回日志。如果直到执行了 RESETLOGS 之后才发现长期存在的逻辑错误,这种情况下该特性非常有用,需要在 RESETLOGS 之前进行闪回。在 Oracle Data Guard 环境中,该功能允许物理备用数据库以读写方式打开,以便稍后闪回更改并将更改转换回物理备用数据库。如果切换 *** 作后发现逻辑错误,可以将主数据库和备用数据库闪回到切换 *** 作前的 SCN 或时间点。Oracle 数据库 10g 第 1 版中的新特性闪回数据库闪回数据库可快速地将 Oracle 数据库倒回至以前的某个时间,以便纠正由逻辑数据损坏或用户错误造成的任何问题。闪回数据库就像数据库的“倒退按钮”。它提供数据库的时间点恢复,而无需先恢复数据库备份。当您希望消除从磁带恢复数据库备份所花的时间时,数据库时间点恢复是一种快速方法。 闪回数据库功能(可使用 FLASHBACK DATABASE 命令从 RMAN 和 SQLPlus 启用)与传统的时间点恢复的效果类似。它允许您将数据库返回到其近期的状态。若要启用闪回数据库功能,用 DBA 配置闪回恢复区。快速恢复区是 Oracle 数据库 10g 的一个新特性,它为 Oracle 数据库中所有与恢复相关的文件和 *** 作提供了统一的存储位置。除了闪回数据库日志外,恢复区还包含存档重做日志和 RMAN 备份。有关快速恢复区的详细信息,请参考 Oracle 备份和恢复文档。 Oracle 在快速恢复区内自动创建和管理闪回日志。因为快速恢复区配置了空间定额,闪回日志要受制于这些磁盘空间限制。闪回日志的大小区别很大,这取决于在给定的闪回日志间隔期间数据库更改的读/写速度。旧程序块版本的副本被写入到闪回日志中。如果一天之内更新了 10% 的数据库程序块,则 24 小时闪回日志的大小约为您数据库大小的十分之一。如果将数据库恢复到过去较早时期可能要求更多的磁盘空间,则 DBA 可能会动态地更改此磁盘定额。 闪回为 Data Guard 提供了易于使用的方法来纠正用户错误。闪回数据库既可用在主数据库上又可用在备份数据库上,可快速地将数据库恢复到较早的时间点,从而避免用户错误。同时,如果管理员决定故障切换到备用数据库,但那些用户错误已被应用于备用数据库(例如,由于启用了实时应用特性),则管理员只需将备用数据库闪回到某个安全的时间点。启用闪回数据库的性能开销不到 2%。您可能不希望牺牲任何生产数据库的性能开销,而是实现一种平衡。如果能在数分钟而不是数小时内恢复数据库,则可避免公司上百万美元的收益损失,您愿意将 2% 的资源用于闪回数据库吗?启用闪回数据库功能有以下几方面好处: 免去了恢复备份的时间。当数据库因遇到灾难性故障而关闭时,公司因无法做生意而导致大量收入损失。 消除了备用数据库重做应用延迟。 闪回数据库与 Data Guard 无缝集成。备用数据库现在可以轻松快速闪回到过去的任意时间点,这样在应用重做过程中就不需要延迟。 意外错误纠正。 闪回数据库提供了 Oracle 数据库的连续快照。数据库可以回退到 SCN 或时间戳。 闪回表当发生人为错误或应用程序错误时,您可能想将一个或多个表状态恢复至故障发生以前的时间点。使用闪回表,DBA 能够将一个或一组表快速轻松地联机恢复到指定时间点。闪回表可在恢复表的同时自动保留其相关属性(如当前索引、触发器和限制),而无需 DBA 查找和恢复应用程序特有的属性。闪回表缓解了执行更为复杂的时间点恢复 *** 作的需求。以下命令将 ORDERS 和 ORDER_ITEMS 表闪回到 7 月 7 日下午 2:33。 FLASHBACK TABLE orders, order_items TO TIMESTAMP (JUL-07-2003, 02:33:00);和闪回查询一样,闪回表也依靠撤销数据来恢复表。因此撤销数据必须可用,这样闪回表才能成功。自动撤销管理特性允许您使用 UNDO_RETENTION 初始化参数指定保留撤销数据的时间。通过使用此参数并适当地规定撤销表空间大小,DBA 能够控制使用闪回表的情况下可修复表的回退时间长短。 DBA 可以使用闪回表特性快速地从人为错误中恢复,它还可以用作自助式修复工具以便从意外修改或删除中恢复。应用程序开发人员可以将闪回表功能合并到他们定制的应用程序中。凭借基于时间点对象的恢复可用性、快速恢复和易用性,该工具相比于介质恢复提供更多的好处。闪回表联机执行恢复 *** 作 将指定表中的所有数据恢复到时间戳或 SCN 描述的先前的时间点。 自动恢复所有的表属性(如索引、触发器以及应用程序所必需的内容),这些应用程序利用闪回的表才能发挥作用。 在分布式环境中维护任何远程状态。例如,所有应用程序要求的表修改都被闪回。 按照约束规定保持数据完整性。Oracle 保留了所有从属对象和参考的完整性。 即使在闪回 *** 作以后,仍然能够将其恢复到最初状态。 闪回删除回收站是一个虚拟容器,所有被删除的对象都驻留在这里。在回收站中,这些对象占据与创建它们时所占据的相同空间。如果在 USERS 表空间中创建表 EMP,那么删除的表 EMP 保留在 USERS 表空间中。并不移动删除的表和任一相关对象(如索引、约束、嵌套表和其他相关对象),仅对它们进行重命名,使其前缀为 BIN$$。可以继续访问删除表中的数据,甚至可以依据删除表使用闪回查询。在删除回收站对象前,每个用户对回收站对象都拥有相同的权利和权限。可以通过查询新回收站视图来查看删除表。回收站中的对象将保留在数据库中,直到删除对象的所有者决定使用新清除命令永久性删除这些对象。按用户的定额对回收站中的对象计数。但闪回删除是一种非破坏性特性。如果发生下面的情况,将通过空间恢复过程自动清除回收站中的对象用户创建新表或添加导致其超出定额的数据。 表空间需要扩展其文件大小,以适应创建/插入 *** 作。 错误删除了表?没问题。使用闪回删除快速撤销删除。 闪回查询闪回查询是随 Oracle9i 一起引入的,它提供了查看存在于以前的数据的能力。默认情况下,数据库上的 *** 作使用最近提交的可用数据。如果希望查询过去某个时间的数据库,那么,可以使用闪回查询特性进行此项 *** 作。此特性可以指定时间或系统更改编号 (SCN),并使用提交的数据从对应时间中进行查询。当使用自动撤销管理时,闪回查询机制最有效。 Oracle 数据库将撤销 *** 作当作第一等级的数据库对象。撤销 *** 作具有持久性,可使数据库系统继续有效,也可导致数据库系统崩溃或关闭。为获取更佳性能,它还与其他数据库对象分享数据库缓冲存储器。Oracle 数据库使用超出事务处理提交范围的撤销 *** 作,提供长期运行查询的读取一致性,并从逻辑损坏中恢复。 Oracle 数据库提供了直接指定为保留而进行的撤销数量的方法。此系统自动回收过期的撤销 *** 作,以便为新事务生成撤销提供空间。撤销保留值的选择取决于长期运行查询的长度以及逻辑损坏的恢复需求。然而,用户可以不选择指定的撤销保留,以及允许系统为指定的撤销空间提供最佳保留。此最佳保留考虑到长期运行查询以及从逻辑损坏中恢复的最佳可能范围。并不保证默认的撤销保留。如果用尽用于现行事务的过期撤销,那么,系统可以使用最早的未过期撤销 *** 作。 如果UNDO_RETENTION 设置为大于 5 天,那么,Oraclee 数据库 10g 第 1 版中的一项新功能是可以查询过去 5 天以前的数据。只要为撤销表空间数据文件分配足够的磁盘空间,那么,Oracle 将维护一段时间内的撤消 *** 作。下面描述了确保数据库可以使用依赖于撤销 *** 作的闪回查询和其他闪回特性所需要的步骤:确保数据库使用一个撤销表空间。将 UNDO_MANAGEMENT 初始化参数设置为自动指定。 将UNDO_RETENTION 初始化参数设置为一个可以使撤销 *** 作保留足够时间的值,从而可以及时成功返回您的最长查询或者从人为错误中恢复。 为了保证未过期的撤销不被覆盖,设置撤销表空间的 RETENTION GUARANTEE 子句。 闪回查询的一个独有特性是可以查看过去的数据,然后正确选择如何处理此信息。您可以进行分析,然后撤销更改,或者捕获更改的数据以供将来处理。闪回查询机制非常灵活,可以用于很多场合。可用于:查询过去存在的数据。 将当前数据与过去的数据进行比较。可以比较单独行或进行更复杂的比较,如查找交集或合并。 恢复已删除或更改的数据。 闪回版本查询闪回版本查询提供了审计表行以及检索有关更改行事务信息的方法。它检索所有提交的行版本,这些行位于或曾经位于发出查询的时间和过去某一时间点之间。它利用自动撤销管理完成此项 *** 作。 闪回版本查询是 SQL 的扩展,可用于检索指定表中不同行的版本,此表存在于特定时间段内。对于任一指定的表,每次执行 COMMIT 语句时,都会创建一个新行版本。闪回版本查询返回存在于指定时间段内的每个行版本的行。使用 SELECT 语句的 VERSIONS BETWEEN 子句调用闪回版本查询功能。 闪回版本查询提供了新的附加列,这些列提供了有关行数据事务的详细信息,此行数据允许 DBA 查明 Oracle 数据库中数据更改的时间和方式。 VERSIONS_XID — 创建此行版本的事务 id VERSIONS_OPERATION — 创建此行版本的 *** 作(如删除、插入和更新) VERSIONS_STARTSCN — 此行版本首次中出现时的 SCN VERSIONS_ENDSCN — 此行版本首次进行更改时的 SCN。 闪回版本查询是 DBA 运行分析和回答“这是怎么发生的?”问题的强大工具。DBA 不仅可以运行手动分析,而且闪回版本查询还是应用程序开发人员的强大工具。可以构建用于审计目的的自定义应用程序。并不是每个人都能够真正解释他/她的 *** 作。 闪回事务查询您可能会发现表中的数据不知何故被不正确地更改了。为了研究该更改,可使用多个闪回查询及时查看指定点的行数据。更高效的方法是,使用闪回版本查询特性查看一定时间内对行进行的所有更改以及相关的事务 id。该特性允许将 VERSIONS BETWEEM 子句附加至 SELECT 语句,后者指定 SCN 或希望查看其间行值发生变化的时间戳范围。 一旦确定错误事务,就可使用闪回事务查询特性识别该事务进行的其他更改,并请求撤销 SQL 来冲销这些更改。您可以通过 FLASHBACK_TRANSACTION_QUERY 视图获得事务历史记录和撤消 SQL。 如果需要将错误事务的结果倒退回去,可以手动执行撤销 SQL 语句,从而可以轻松地从用户或应用程序错误中恢复。闪回事务查询可以提高对数据库中问题的联机诊断能力,并利于执行事务分析和审计。总结人为错误是导致系统故障的主要原因之一。这些错误很难避免,而且在没有事先规划和使用正确技术的情况下尤其难以恢复。“正确”技术是:Oracle 数据库 11g。为什么犯错误只需几秒,而恢复却要花费数小时或数天?不应如此并且现在也不会如此。闪回通过只在更改数据上运行引发了恢复变革。一条命令即可修复人为错误导致的损坏。闪回技术在去除了恢复的复杂性的同时,缩短了从难以预测的人为错误恢复的时间。
不需要设置 立即识别对行的所有更改
在 Oracle i Database 中 我们看到它推出了以闪回查询形式表示的 时间机器 该特性允许 DBA 看到特定时间的列值 只要在还原段中提供该数据块此前镜像的拷贝即可 但是 闪回查询只提供某时刻数据的固定快照 而不是在两个时间点之间被更改数据的运行状态表示 某些应用程序 如涉及到外币管理的应用程序 可能需要了解一段时期内数值数据的变化 而不仅仅是两个时间点的数值 由于闪回版本查询特性 Oracle Database g 能够更方便高效地执行该任务
查询对表的更改
在本示例中 我使用了一个银行外币管理应用程序 其数据库含有一个名称为 RATES 的表 用于记录特定时间的汇率
SQL> desc rates Name NullType CURRENCY VARCHAR ( ) RATE NUMBER( )
该表显示 US$ 与各种其他货币的汇率 在 CURRENCY 列中显示 在金融服务行业中 汇率不但在变更时进行更新 而且被记录在历史中 需要这种方式的原因是银行交易可能在 过去时间 生效 以便适应由于汇款而耗费的时间 例如 对于一项在上午 : 发生但在上午 : 生效的交易 其有效汇率是上午 : 的汇率 而不是现在的汇率
直到现在 唯一的选择是创建一个汇率历史表来存储汇率的变更 然后查询该表是否提供历史记录 另一种选择是在 RATES 表本身中记录特定汇率适用性的开始和结束时间 当发生变更时 现有行中的 END_TIME 列被更新为 SYSDATE 并插入一个具有新汇率的新行 其 END_TIME 为 NULL
但是在 Oracle Database g 中 闪回版本查询特性不需要维护历史表或存储开始和结束时间 使用该特性 您不必进行额外的设置 即可获得某行在过去特定时间的值
例如 假定该 DBA 在正常业务过程中数次更新汇率 ― 甚至删除了某行并重新插入该行
insert into rates values ( EURO ); mit; update rates set rate = ; mit; update rates set rate = ; mit; delete rates; mit; insert into rates values ( EURO ); mit; update rates set rate = ; mit;
在进行了这一系列 *** 作后 DBA 将通过以下命令获得 RATE 列的当前提交值
SQL> select from rates;
CURR RATE EURO
此输出显示 RATE 的当前值 没有显示从第一次创建该行以来发生的所有变更 这时使用闪回查询 您可以找出给定时间点的值 但我们对构建变更的审计线索更感兴趣 ― 有些类似于通过便携式摄像机来记录变更 而不只是在特定点拍摄一系列快照
以下查询显示了对表所做的更改
select versions_starttime versions_endtime versions_xid versions_operation rate from rates versions beeen timestamp minvalue and maxvalue order by VERSIONS_STARTTIME /
VERSIONS_STARTTIME VERSIONS_ENDTIME VERSIONS_XID V RATE DEC PM DEC PM C I DEC PM DEC PM A A U DEC PM DEC PM A B U DEC PM A C D DEC PM DEC PM A D I DEC PM A E U
注意 此处显示了对该行所作的所有更改 甚至包括该行被删除和重新插入的情况 VERSION_OPERATION 列显示对该行执行了什么 *** 作 (Insert/Update/Delete) 所做的这些工作不需要历史表或额外的列
在上述查询中 列 versions_starttime versions_endtime versions_xid versions_operation 是伪列 与 ROWNUM LEVEL 等其他熟悉的伪列相类似 其他伪列 ― 如 VERSIONS_STARTSCN 和 VERSIONS_ENDSCN ― 显示了该时刻的系统更改号 列 versions_xid 显示了更改该行的事务标识符 有关该事务的更多详细信息可在视图 FLASHBACK_TRANSACTION_QUERY 中找到 其中列 XID 显示事务 id 例如 使用上述的 VERSIONS_XID 值 A D UNDO_SQL 值显示了实际的语句
SELECT UNDO_SQL FROM FLASHBACK_TRANSACTION_QUERY WHERE XID = A D ;
UNDO_SQL insert into ANANDA RATES ( CURRENCY RATE ) values ( EURO );
除了实际语句之外 该视图还显示提交 *** 作的时间标记和 SCN 查询开始时的 SCN 和时间标记以及其他信息
找出一段时期中的变更
现在 让我们来看如何有效地使用这些信息 假设我们需要找出下午 : : 时 RATE 列的值 我们可以执行
select rate versions_starttime versions_endtime from rates versions beeen timestamp to_date( / / : : mm/dd/yyyy hh :mi:ss ) and to_date( / / : : mm/dd/yyyy hh :mi:ss ) /
RATE VERSIONS_STARTTIME VERSIONS_ENDTIME
此查询与闪回查询类似 在以上的示例中 开始和结束时间为空 表示汇率在该时间段中没有更改 而是包含一个时间段 还可以使用 SCN 来找出过去的版本值 可以从伪列 VERSIONS_STARTSCN 和 VERSIONS_ENDSCN 中获得 SCN 号 以下是一个示例
select rate versions_starttime versions_endtime from rates versions beeen scn and /
使用关键词 MINVALUE 和 MAXVALUE 可以显示还原段中提供的所有变更 您甚至可以提供一个特定的日期或 SCN 值作为范围的一个端点 而另一个端点是文字 MAXVALUE 或 MINVALUE 例如 以下查询提供那些只从下午 : : 开始的变更 而不是全部范围的变更
select versions_starttime versions_endtime versions_xid versions_operation rate from rates versions beeen timestamp to_date( / / : : mm/dd/yyyy hh :mi:ss ) and maxvalue order by VERSIONS_STARTTIME /
VERSIONS_STARTTIME VERSIONS_ENDTIME VERSIONS_XID V RATE DEC PM A C D DEC PM DEC PM A D I DEC PM A E U
最终的分析
闪回版本查询随取随用地复制表变更的短期易变数值审计 这一优点使得 DBA 能够获得过去时间段中的所有变更而不是特定值 只要还原段中提供数据 就可以尽情使用 因此 最大的可用版本依赖于 UNDO_RETENTION 参数
lishixinzhi/Article/program/Oracle/201311/17217
恢复的方法是RMAN数据全备+增量备份+归档日志(+联机日志),或者RMAN数据全备+归档日志(+联机日志)。
比如你要恢复到 19号中午12点的,你首先要有一个19号12点之前的一个RMAN数据库全备,比如是18号12点的,然后必须有18号12点到19号12点的归档日志和联机日志(一般恢复到某个时间点的时候联机日志可能用不到)。先做restore恢复,然后recover指定时间点。
为了使oracle数据库从任何逻辑误 *** 作中迅速恢复,Oracle 数据库10g 提供了一系列人为错误更正技术,称为闪回。闪回从根本上改变了数据恢复。过去,数据库在几分钟内就可能损坏,但需要几小时才能恢复。利用闪回技术,更正错误的时间与错误发生时间几乎相同。而且它非常易用,使用一条短命令便可恢复整个数据库,而不必执行复杂的程序。闪回技术提供了一个 SQL 界面,能够快速分析和修复人为错误。闪回技术为本地数据损坏提供了细粒度外部分析和修复,如当错误删除客户订单时。闪回技术还支持修复更多广泛的损坏,同时快速避免长时间停机,如当本月的所有客户订单都被删除时。闪回技术是 Oracle 数据库独有的特性,支持各级恢复,包括行、事务、表、表空间和数据库范围。
1 闪回查询
在Oracle 9i之前,如果用户错误 *** 作数据后,除了不完全恢复外,没有好的解决办法。Oracle 9i中提供闪回查询,由一个新的包DBMS_FLASH来实现。用户使用闪回查询可以及时取得误 *** 作DML(Delete、Update、Insert)前某一时间点数据库的映像视图,用户可以利用系统时间或系统改变号(SCN:System Change Number)来指定这个只读视图,并可以针对错误进行相应的恢复措施。闪回查询功能完全依赖于自动回滚段管理(AUM),对于Drop等误 *** 作不能恢复。闪回特性可应用在以下方面:
(1)自我维护过程中的修复:当一些重要的记录被意外删除,用户可以向后移动到一个时间点,查看丢失的行并把它们重新插入现在的表内恢复。
(2)恢复Email和声音Email:当用户意外删除了Email或者声音信息时,可以通过移回到固定时间点来恢复删除。
(3)账号平衡状况:可以查看以前的历史数据。如银行外币管理中用于记录特定时间的汇率。在以前,汇率变更被记录在一个历史表中,现在就可以通过闪回功能进行查询。
(4)用于趋势分析的决策支持系统:决策支持系统和联机分析应用必须执行一个长时间的事务。使用闪回查询,这些应用可以对历史数据执行分析和建模。例如,特定产品如矿泉水随季节变化需求情况的变化。
2 闪回版本查询
闪回版本查询提供了一种查看行级数据库变化的方法。它是 SQL 的扩展,支持以特定时间间隔检索所有不同版本的行。例如:
Select from EMPLOYEE versions between ‘2:00 PM’ and ‘3:00 PM’ where …
该语句显示出今天下午 2 点至 3 点之间该行的各版本,每个版本都由不同的事务所更改。使用 DBA 可指出数据何时、如何被更改的,并追溯到用户、应用程序或事务。这使得 DBA 可以跟踪数据库中的逻辑破坏并加以更正。它还让应用开发人员能够对其代码进行调试。
3 闪回事务查询
闪回事务查询提供了一种查看事务级数据库变化的方法。它是 SQL 的扩展,能够看到事务带来的所有变化。例如:
Select from DBA_TRANSACTION_QUERY where xid = ‘000200030000002D’;
该语句显示出该事务引起的结果性变化。此外,返回补充 SQL 语句,并用于撤消由事务引起的各行变化。使用精密工具(如 DBA),应用开发人员可以精确地诊断和更正数据库或应用中的逻辑问题。
4 闪回数据库
要将 Oracle 数据库恢复到以前的时间点,传统方法是进行时间点恢复。然而,时间点恢复需要用数小时甚至几天的时间,因为它需要从备份中恢复整个数据库,并恰好恢复到数据库发生错误前的时间点。由于数据库的大小不断增长,因此需要用数小时甚至几天的时间才能恢复整个数据库。 闪回数据库是进行时间点恢复的新战略。它能够快速将 Oracle 数据库恢复到以前的时间,以正确更正由于逻辑数据损坏或用户错误而引起的任何问题。闪回日志可用于捕获旧版本的变化块。一种方法是不间断备份或存储快照。当需要执行恢复时,可快速重放闪回日志,以将数据库恢复到错误前的时间点,并且只恢复改变的块。这一过程非常快,可将恢复时间从数小时缩短至几分钟。此外,它还非常易用。通过发出以下简单的命令,可将数据库恢复到 2:05 PM。
FLASHBACK DATABASE to ‘2:05 PM’;
它的使用不要求进行磁带恢复,没有冗长的停机时间,没有复杂的恢复过程。您还可以使用闪回,然后以只读方式打开数据库,并检查其内容。如果您确定闪回过远或不足,您可以重新发出闪回命令,以找到数据库损坏前的正确时间点。闪回同时与 Data Guard 相集成,因此您可以一起闪回生产和待机数据库(参见以下数据保护部分)。
闪回数据库就像是为数据库安装了一个倒回或撤消按钮。
5 闪回表
使用该特性,可以确保数据库表能够被恢复到之前的某一个时间点上。注意,该功能与最早的Oracle 9i中的Flashback Query不同,Flashback Query仅是得到了表在之前某个时间点上的快照而已,并不改变当前表的状态;而Falshback Table却能够将表及附属对象一起回到以前的某个时间点。该功能基于撤销数据(undodata)。
6 闪回删除
无意丢弃或删除数据库是人们经常会犯的错误。经常听到 Oracle 支持人员说:“在我删除那个表时,我以为我已经连接到了测试数据库。”用户已认识到他们错了,但已经太晚了,没有办法轻松恢复被删除的表及其索引、约束和触发器。对象一旦被删除就永远被删除了。如果真是重要的表或其它对象(如索引、分区或集簇),DBA 不得不执行时间点恢复,但这非常耗时,而且会导致丢失最近的事务。 闪回删除针对删除 Oracle 数据库 10g 中的对象提供了一个安全网络。当用户删除一个表,Oracle 会将它放到垃圾箱中。垃圾箱中的对象一直会保留,直到用户决定永久删除它们或包含该本的表空间不足。垃圾箱是一个虚拟容器,用于存放所有被删除的对象。用户可以查看垃圾箱,“撤消”被删除的表及其相关的对象。例如,可以发出以下命令来“撤消”雇员信息表及其所有相关对象。
FLASHBACK TABLE employee BEFORE DROP;
闪回删除就像是为一个表及其相关对象安装了一个撤消按钮。
在不开归档日志的情况下,Oracle数据库的备份只能依赖exp命令(逻辑备份)导出数据文件(注意:不包括日志文件以及控制文件等),导出的所有数据仅仅以一个大文件的方式来存放,但是这种备份容易导致丢失数据。举个例子:如果5号晚上进行了exp数据导出,但是在6号的运行过程中发生宕机,数据丢失,这个时候从5号备份后一直到6号宕机前的数据将全部丢失(即使将日志文件和控制文件拷出来都无法恢复,因为exp导出的数据无法与这些日志文件一一对应起来恢复)。所以采用exp方式备份数据还是存在很大风险的。
另一种方式就是使用Oracle自带的备份工具rman。一次rman备份(物理备份)的全过程如下:
因为使用rman备份不会产生数据丢失的情况,所以必须有一个全备份的文件,使用rman需要先进行一次全备份,相当于将当前数据库里面的所有文件以及日志都全盘拷贝一份到备份介质中,然后通过归档日志(实时更新的)的记录看每个进程都对数据库做了哪些修改,只要保留了一份物理备份以及物理备份之后的所有归档日志,就能够将数据库恢复到宕机前一刻的状态,将数据丢失降到最低。(每个redo log写满之后就开始写到achive log里面进行归档,这个里面还是有个时间段的,不能做到完全的实时)
以上就是关于oracle 归档日志能不能恢复昨天的数据库全部的内容,包括:oracle 归档日志能不能恢复昨天的数据库、oracle在没有闪回的情况下怎样找回以删了的表、OracleDatabase10g:闪回版本查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)