`
Ordier
  • 浏览: 61221 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

oracle 数据提交之后如何闪回

阅读更多
  当你对数据库的数据进行update后,并commit。 但是你马上又后悔了你所做的更改,或者你在做update的时候忘记了加where条件 致使大量的数据被更改。
  如果你的数据库是oracle9i那么就可以利用 9i的新特性闪回查询

  首先查看系统参数看是否支持闪回查询
SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------
undo_management                      string      AUTO
undo_retention                       integer     10800
undo_suppress_errors                 boolean     FALSE
undo_tablespace                      string      UNDOTBS1

参数 undo_management 为 auto 表示可以
undo_retention  表示可以闪回的时间,默认为3 个小时。

9i支持闪回查询的包:dbms_flashback
需要在非dba用户下,例如:system 进行操作

SQL> execute dbms_flashback.enable_at_time(sysdate-1/24/3);
1/24/3:系统当前时间 的前8个小时的数据。
执行完成之后,在当前的session下进行查询就可以查到历史数据。
如果要回到原来的实时数据

SQL> execute dbms_flashback.disable

局限性

1、闪回查询是基于SCN的,虽然我执行的是:

DBMS_FLASHBACK.ENABLE_AT_TIME(to_date('2003-05-16 15:37:23'));

但Oracle并不会精确的这个时间点,而是ROUND DOWN到最近的一次SCN,然后从这个SCN开始进行恢复。而Oracle 9i是每五分钟记录一次SCN的,并将SCN和对应时间的映射做个纪录。

这正是上面我们进行恢复时少了一条的原因。因此如果使用DBMS_FLASHBACK.ENABLE_AT_TIME来进行恢复,为了避免恢复失败,我可以先等5分钟,然后再进行恢复。

使用DBMS_FLASHBACK.ENABLE_AT_TIME进行恢复还有一个缺点,那就是在Oracle 9i中SCN和对应时间的映射信息只会保留5天,因此我们无法通过DBMS_FLASHBACK.ENABLE_AT_TIME来恢复5天前的数据。如果你想使用闪回查询来恢复5天前的数据,你必须自己来确定需要恢复的SCN,然后使用

DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(SCN_NUMBER); 来定位你的恢复时间点,下面是使用方法:

15:58:58 SQL> VARIABLE SCN_SAVE NUMBER;

16:13:43 SQL> EXECUTE :SCN_SAVE := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER;

PL/SQL procedure successfully completed.

16:13:50 SQL> print SCN_SAVE;

SCN_SAVE

----------

2.1202E+11

16:28:34 SQL> execute DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(:SCN_SAVE);

PL/SQL procedure successfully completed.

另外,在使用DBMS_FLASHBACK.ENABLE_AT_TIME前,你必须设定你的NLS_DATE_FORMAT的精确程度,Oracle默认的是精确到天,如果你不设定,像上面的例子你不会得到预期结果。

2、如果你使用sysdate和DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER来获取时间点或者SCN值,你必须注意它们取得都是当前的时间点和SCN值。

3、你只能在事务开始时进入闪回查询模式,如果之前有DML操作,则必须COMMIT。

4、闪回查询无法恢复到表结构改变之前,因为闪回查询使用的当前的数据字典。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics