ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 一种数据被误修改后的找回方法

一种数据被误修改后的找回方法

原创 Linux操作系统 作者:yb708 时间:2013-11-23 18:58:04 0 删除 编辑

一种数据被误修改后的找回方法

       之前同事跟我提起我们数据库中表的数据有时会莫名其妙的被修改,针对这种情况如何尽快的找到原来的数据呢,看起来问题比较棘手,但如果问题发现的时间与数据被修改的时间间隔不长的话,在oracle中提供了一种比较简单和轻量级的方法就是闪回查询,通过闪回查询在大多数情况下可以满足这种要求。

       假设希望获得表t1一天前的数据,使用如下查询即可以达到目的:

FM@TEST 2013-11-22 15:21:21> SELECT * FROM T1 AS OF TIMESTAMP ( TO_DATE('2013-11-21 15:19:51', 'YYYY-MM-DD HH24:MI:SS') ) ;

A

----------

BBB

但如果查询更早时间的数据,也有可能会报错:

FM@TEST 2013-11-22 15:21:35> SELECT *FROM T1 AS OF TIMESTAMP ( TO_DATE('2013-11-21 00:19:51', 'YYYY-MM-DD HH24:MI:SS') ) ;

SELECT * FROM T1 AS OF TIMESTAMP ( TO_DATE('2013-11-21 00:19:51', 'YYYY-MM-DD HH24:MI:SS') )              *

ERROR at line 1:

ORA-01555: snapshot too old: rollback segment number 2 with name "_SYSSMU2_1606812849$" too small

能够查询到多久前的数据可以查询视图v$undostat(该视图会保留4天的数据):

SYS@test 2013-11-23 18:18:51> select begin_time, end_time , tuned_undoretention from v$undostat order by end_time;

BEGIN_TIME          END_TIME            TUNED_UNDORETENTION

------------------- ------------------- -------------------

2013-11-19 18:28:21 2013-11-22 21:18:21                   0

2013-11-22 21:18:21 2013-11-22 21:28:21                1123

2013-11-22 21:28:21 2013-11-22 21:38:21                 900

2013-11-22 21:38:21 2013-11-22 21:48:21                1120

2013-11-22 21:48:21 2013-11-22 21:58:21                1720

2013-11-22 21:58:21 2013-11-22 22:08:21                1116

2013-11-22 22:08:21 2013-11-22 22:18:21                1717

这个查询跨度由undo_retention参数、undo表空间的大小和undo表空间的RETENTION属性(取值为NOGUARANTEEGUARANTEE)来控制,如果将undo_retention参数设置为更大的值(oracle的建议值是86400),并且undo表空间为自动扩展的话,闪回查询可以保证查询到更长时间前的数据。

另外通过这次对表的闪回查询的测试,纠正了之前的一个理解错误,表的闪回查询需要在归档模式下才有效,其实没有任何关系。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7913676/viewspace-777419/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-08-07

  • 博文量
    11
  • 访问量
    186335