oracle--数据闪回

1.闪回表
    闪回表,实际上是将表中的数据快速恢复到过去的一个是焦点或者系统改变号SCN上。实现表的闪回,需要使用到与撤销表空间相关的undo信息,通过show parameter undo命令可以了解这些信息。

    用户对表数据的修改操作,都记录在撤销表空间中,这为表的闪回提供了数据恢复的基础。例如,某个修改操作在提交后被记录在撤销表空间中,保留时间为900秒,用户可以在这900秒的时间内对表进行闪回操作,从而将表中的数据恢复到修改之前的状态。

    执行表的闪回,需要有flashback any table的权限

    --打开表的行移动
    alter table tablename enable row movement;

    闪回表的语法:
    FLASHBACK TABLE [schema.]<table_name>
    TO  
    {[BEFORE DROP [RENAME TO table]]  
    SCN|TIMESTAMP]expr
    [ENABLE|DISABLE]TRIGGERS}

    schema:模式名,一般为用户名。
    TO TIMESTAMP:系统邮戳,包含年、月、日、时、分、秒。
    TO SCN:系统更改号,
    ENABLE TRIGGERS:表示触发器恢复以后为enable状态,而默认为disable状态。
    TO BEFORE DROP:表示恢复到删除之前。
    RENAME TO table:表示更换表名。

    --如何获取离该操作最近的一个时间或者SCN?
      根据闪回版本查询,确定starttime 然后闪回该时间的表状态;

    注意:
    系统表不能被闪回;
    不能跨越DDL操作;


2.闪回删除
    &oracle的回收站:管理员没有回收站
     查看回收站:show recyclebin;
     清空回收站:purge recyclebin;
    &执行闪回删除
    
3.闪回版本查询
    闪回版本查询,提供了一个审计行改变的查询功能,通过它可以查找到所有已经提交了的行记录。其语法格式如下:

    select column_name[,column_name,...]
    from table_name
    versions between [SCN|TIMESTAMP] [expr|MINVALUE]
    and     [epxr|MAXVALUE] as of [SCN|TIMESTAMP] expr;

    其中:column_name列名;table_name表名;between...and时间段;SCN系统改变号;TIMESTAMP时间戳;AS OF表示恢复单个版本;MAXVALUE最大值;MINVALUE最小值;expr指定一个值或者表达式。
    
    eg:
        select column_name,versions_operation,versions_starttime,versions_endtime,versions_xid
        from tablename
        versions between timestamp minvalue and maxvalue

4.闪回事务查询
    闪回事务查询实际上闪回版本查询的一个扩充,通过它可以审计某个事务甚至撤销一个已经提交的事务。

    实现闪回事务查询,需要先了解flashback_transaction_query视图,从该视图中可以获取事务的历史操作记录以及撤销语句(UNDO_SQL)。

    使用闪回事务查询,可以了解某个表的历史操作记录,这个操作记录对应一个撤销SQL语句,如果想要撤销这个操作,就可以执行这个SQL语句。
    
    具体步骤:
      &根据闪回版本查询,查询事务ID(versions_xid )
      &根据查询的事务ID,查询flashback_transaction_query表的相关信息
        (select operation,undo_sql from flashback_transaction_query where xid=?)
      &执行UNDO_SQL语句,提交即完成了闪回事务查询;(如果查询的UNDO_SQL语句为空,则需要执行(alter database add supplemental log data;)语句;)
      
总结:
     1、闪回表操作记录;
        &先查出事务ID;
         select column_name(表字段),versions_operation,versions_starttime,versions_endtime,versions_xid
            from tablename
            versions between timestamp minvalue and maxvalue
        &根据事务ID,查询UNDO_SQL语句;
         (select operation,undo_sql from flashback_transaction_query where xid=?)
        &执行UNDO_SQL语句,提交即完成了闪回事务查询;(如果查询的UNDO_SQL语句为空,则需要执行( alter database add supplemental log data;)语句;)
     2、闪回表删除操作
        &oracle的回收站:管理员没有回收站
            查看回收站:show recyclebin;
            清空回收站:purge recyclebin;
        &执行闪回删除
            flashback table tablename to before drop;
    

        

 


posted on 2017-08-25 17:20  luhanzhen  阅读(865)  评论(0编辑  收藏  举报