zoukankan      html  css  js  c++  java
  • 表闪回操作及解决闪回表时出现的ORA08189故障

        闪回的表首先要先允许行移动:alter table xx enable row movement;

        接着就是闪回了:flashback table xx to timestamp to_timestamp('2009-06-01 10:00:00','yyyy-mm-dd hh24:mi:ss');

        记住这个时间,下次做事要甚而尤甚,因为不是所有的事都有后悔药吃的!



    select dbms_flashback.get_system_change_number from dual;

    GET_SYSTEM_CHANGE_NUMBER
    ------------------------
    152713033
    SQL> select count(*) from testvarchar;
    COUNT(*)
    ----------
    10000000

    操作如下:
    SQL> delete testvarchar;   
    10000000 rows deleted.
    SQL> commit;
    Commit complete.
    SQL> select count(*) from testvarchar;
    COUNT(*)
    ----------
    0

    时间点:time2
    SQL> select dbms_flashback.get_system_change_number from dual;
    GET_SYSTEM_CHANGE_NUMBER
    ------------------------
    152883734

    用Flashback功能查询以前的数据

    SQL> select count(*) from testvarchar as of scn 152713033;

    COUNT(*)
    ----------
    10000000
    SQL>
    用flashback直接恢复表
    SQL> flashback table testvarchar to scn 152713033;
    flashback table testvarchar to scn 152713033
    *
    ERROR at line 1:
    ORA-08189: cannot flashback the table because row movement is not enabled
    --或使用时间点闪回:
    --FLASHBACK TABLE LICZ.SALES TO TIMESTAMP to_timestamp('2009-04-30 13:26:49', 'YYYY-MM-DD HH24:MI:SS');

    SQL> alter table testvarchar enable row movement;

    Table altered.

    这个命令的作用是,允许Oracle 修改分配给行的rowid。在Oracle 中,插入一行时就会为它分配一个rowid,而且这一行永远拥有这个rowid。闪回表处理会对EMP 完成DELETE,并且重新插入行,这样就会为这些行分配一个新的rowid。要支持闪回就必须允许Oracle 执行这个操作

    SQL> flashback table testvarchar to scn 152713033;
    Flashback complete.
    SQL> select count(*) from testvarchar;
    COUNT(*)
    ----------
    10000000
    SQL>

    注意:你在create表后,等5分钟后再进行相应的scn查询,del操作,因为9i只支持dml的flashback,create等的ddl不支持,你闪回到的scn有可能dml和ddl在5分钟内,否则会导致出现ora-01466错误。

    在10g中支持ddl操作闪回,如不小心删除了一个表,可用下面操作闪回,
    但注意oracle( Release 10.2.0.1.0)回收站不支持系统表空间,如果删除的这个在系统表空间,这个表是不能闪回的

    1 查看回收站
    SQL> SELECT original_name, object_name, TYPE, droptime FROM user_recyclebin;
    ORIGINAL_NAME     OBJECT_NAME       TYPE                                   DROPTIME
    -------------    ---------------------------          ------------                              -------------------
    DEMO              BIN$cI/hTpOYT4GOLWfF+7O78Q==$0   TABLE        2009-05-14:15:09:40

    2 恢复
    SQL> FLASHBACK TABLE demo TO BEFORE DROP;

    最后需要注意的问题:

    对表数据更新一段时间后,只有在初始化参数UNDO_RETENTION设置的时间内才可以查询到表flashback_transaction_query的数据更改记录。而且,只有初始化参数UNDO_MANAGEMENT设置为AUTO后才能使用闪回查询。

  • 相关阅读:
    最近遇到了这个坑,特意记录下
    《java8实战阅读笔记》
    Namespace的简讲
    发展历程C++及C++与C语言的关系
    进程间通信的概述2
    本来调试无误的程序在真机运行时报标题错误解决方案
    navagationController 的子控制器如何取消右滑返回
    iOS常见的设计模式
    代码:Masonry 第三方框架
    Autolayout的在storyboard警告和错误
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400385.html
Copyright © 2011-2022 走看看