Chinaunix首页 | 论坛 | 博客
  • 博客访问: 833636
  • 博文数量: 199
  • 博客积分: 6363
  • 博客等级: 准将
  • 技术积分: 2225
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-28 10:01
个人简介

来自农村的老实娃

文章分类

全部博文(199)

文章存档

2017年(1)

2014年(2)

2013年(3)

2012年(6)

2011年(26)

2010年(34)

2009年(50)

2008年(44)

2007年(33)

我的朋友

分类: Oracle

2007-08-02 10:57:41

您可能会发现表中的数据不知何故被不正确地更改了。为了研究该更改,可使用多个闪回查询来及时查看指定点的行数据。更为有效的方式是使用闪回版本查询功能来查看一定时期内对行进行的所有更改。该功能允许将 VERSIONS BETWEEM 子句附加至 SELECT 语句,后者指定 SCN 或希望查看的行值更改之间的时间戳范围。


一旦确定错误事务,就可使用闪回事务查询功能来识别其他由该事务进行的更改,并请求撤消 SQL 来冲销这些更改。DBA_TRANSACTION_QUERY 查看意为通过其可获得事务历史和撤消SQL

事务处理标识从之前的闪回版本查询获得。结果行会显示该事件内所做的所有更改。在此特定情况下,ORDER 2453 和属于 ORDER 2453 ORDER ITEMS 已被删除。如果需要维修错误的活动,则系统会提供 SQL 语句以进行手动操作。

闪回事务查询提供了一种查看事务级数据库更改的方法。与闪回版本查询结合使用时,其可便捷地从用户或应用程序错误恢复。它提高了对数据库中问题的联机诊断能力,并执行事务分析和审核。

实例

让我们来仔细研究一下使用回闪技术工具来执行自助服务维修的一个实例2 ,即无需管理员参与就可从人为错误恢复

Lisa 是软件开发组的经理,他们的产品销售良好。Lisa 决定对所有具有超过 2 年的经验和等级为 3 的员工,薪酬提高 10% 并将其等级提升为 4 级。Lisa 让她的 HR 代表 Bob 来进行这些更改。

Bob 使用他们的 HR Web 应用程序来更新公司数据库,以将 Lisa 组中等级为 3 的员工的薪酬提高 10% 并将其等级提升为 4 级。就在 Bob 按下提交按钮时,才意识到他遗漏了 2 年经验这个要求。现在 Bob 该怎么做?

Bob 可以通过执行以下命令来回退表至其进行错误更改之前:

FLASHBACK TABLE employee TO TIMESTAMP (systimestamp - interval '5' minute);

之后,在下午 5 .Lisa 决定给 Joe 额外提高 5%,作为组中明星员工的奖励,并让 Bob 执行此更新。Bob Lisa 汇报说 Joe 的记录丢失了。然后 Lisa Bob 执行闪回版本查询来查明 Joe 的记录发生了什么事。

SELECT versions_starttime, versions_operation, sal from employee VERSIONS BETWEEN MINVALUE AND MAXVALUE where name = ‘JOE’;

结果显示 Joe 的记录在下午 4 点后被删除了。使用闪回查询,Bob 发现了丢失的 Joe 的员工数据。

2  感谢 Oracle Bipul Sinha Vasudha Krishnaswamy 提供的实例。


INSERT INTO employee SELECT * FROM employee AS OF TIMESTAMP TO_TIMESTAMP(’2003-07-18 15:30:00’, ‘YYYY-MM-DD HH24:MI:SS’) WHERE name = ‘JOE’;

按照以下命令,Lisa 可找出有关登录用户的信息和通过使用闪回版本查询和闪回事务查询删除 “JOE” 的所有其他用户事件更改

SELECT commit_timestamp , logon_user FROM dba_transaction_query WHERE xid IN (SELECT versions_xid FROM employee VERSIONS BETWEEN TIMESTAMP TO_TIMESTAMP(’2003-07-18 15:30:00’, ‘YYYY-MM-DD HH24:MI:SS’) and TO_TIMESTAMP(’2003-07-18 17:00:00’, ‘YYYY-MM-DD HH24:MI:SS’) WHERE name = ‘JOE’);

如果仅此行受到事务的不利影响,则可通过上述的闪回查询恢复该行。另一方面,如果他们发现 EMPLOYEE 表中有许多其他错误,则可通过使用如下所示的闪回表将整个表恢复至 16:00 时的状态:

FLASHBACK TABLE employee TO TIMESTAMP TO_TIMESTAMP (’2003-07-18 16:00:00’, ‘YYYY-MM-DD HH24:MI:SS’);

按照所示,Bob 重新执行 Lisa 所需的两套更新。

本例说明了终端用户如何从先前在数据库中提交的错误事务中恢复。

结论

数据库备份是恢复关键数据的保险措施。Oracle 数据库 10g 提供的机制可以组织和管理快速恢复区中的恢复相关文件。它消除了对手动记录备份位置的需要,并在恢复不再需要时将其删除。如果备份窗口收缩,由于先前的备份利用了新的变化跟踪文件功能,因而 RMAN 可直接读取变化块。现在使用 Oracle 数据库 10g 的技术优势和企业管理器,可实现恢复战略以达到恢复时间目标。

用于保护和恢复数据的方法和工具应提供:

􀂃 可靠性。RMAN.

􀂃 灵活性。RMAN.

􀂃 管理性。RMAN.

􀂃 可用性。RMAN.

 

如果您以前从未测试过 RMAN,那么试试吧。然而我们并没有丢失良好的备份!


人为错误是导致系统故障的主要原因之一。这些错误很难避免,而且在没有事先规划和使用正确技术的前提下尤其难以恢复。此处正确的技术就是 Oracle 数据库 10g。为什么犯错误只需几秒,恢复却要花费数小时或数天?不应如此并且现在也不会如此。闪回通过只在更改数据上运行引发了恢复变革。单一的外部命令就可维修人为错误导致的损坏。闪回技术去除了恢复复杂性的同时,降低了从难以预测的人为错误恢复的时间。

所有这一切就从 Oracle 数据库 10g 开始!


 

阅读(1496) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~