• [bbk4759] 第28集 第三章 Flashback Table 05


    实现Flashback table操作的前提条件

    权限及及开启movement row功能

    /*************************************************************************/

    实验:flashback table操作

    1、emp1-7369-900

    2、emp1-7369-900-1000

         error where deptno=20---7369-1900

    3、flashback version query

    4、flashback table---recover

    总结:

      1、比incomplete recovery 影响返回小,保证数据库online

      2、当表的子集发生错误操作时,可以通过flashback table功能实现.

    /*************************************************************************/

    SQL> create table emp1 as select * from emp;
    
    Table created.
    
    SQL> select empno,sal,deptno from emp1 where deptno = 20;
    
         EMPNO        SAL     DEPTNO
    ---------- ---------- ----------
          7369        800         20
          7566       2975         20
          7788       3000         20
          7876       1100         20
          7902       3000         20
    
    SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') current_date from dual;
    
    CURRENT_DATE
    -------------------
    2013-05-17 07:43:04
    SQL> update emp1 set sal = 1900 where deptno = 20;
    
    5 rows updated.
    
    SQL> commit;
    
    Commit complete.

    step 3 :使用flashback version query,定位数据变化.

    SQL> l
      1  select versions_xid,versions_starttime,versions_endtime,empno,sal
      2  from emp1
      3  versions between timestamp
      4     to_timestamp('2013-05-17 07:43:04','yyyy-mm-dd hh24:mi:ss')
      5     and maxvalue
      6* where empno = 7369
    SQL> /
    
    VERSIONS_XID     VERSIONS_STARTTIME        VERSIONS_ENDTIME               EMPNO        SAL
    ---------------- ------------------------- ------------------------- ---------- ----------
    02001000EE080000 17-MAY-13 07.55.05 AM                                     7369       1900
                                               17-MAY-13 07.55.05 AM           7369        800

    开启emp1表的行移动功能

    SQL> alter table emp1 enable row movement;
    
    Table altered.

    闪回emp1表

    SQL> flashback table emp1 to timestamp
      2   to_timestamp('2013-05-17 07:43:04','yyyy-mm-dd  hh24:mi:ss');
    
    Flashback complete.

    验证数据

    SQL> select empno,sal,deptno from emp1
      2   where deptno = 20;
    
         EMPNO        SAL     DEPTNO
    ---------- ---------- ----------
          7369        800         20
          7566       2975         20
          7788       3000         20
          7876       1100         20
          7902       3000         20

    Flashback Table:Considerations

    • The FLASHBACK TABLE command executes as a single transaction,acquiring exclusive DML locks.
      • Flashback Table操作相当于一个DML操作,独立的锁机制;要么都成功,要么都失败
    • Statistics are not flashed back.
      • 执行Flashback table之后,数据字典中相应的statistics data不会发生变化.
    • Current indexes and dependent objects are maintained
      • Oracle database在执行Flashback table后,会自动维护相应的索引及对象信息;
      • 比如与表对应的materialized views数据,oracle database也会自动进行维护,与变化后的数据保持一致.
    • Flashback Table operations
      • Cannot be performed on system tables
        • 假如在system用户下,建了业务表,这种表也是不能进行闪回操作的.
      • Cannot span DDL operations
      • Generate undo and redo data
  • 相关阅读:
    12个Web开发者应该掌握的Firebug技巧
    sql语句修改表结构
    从数据库中查询数据
    收发短信API
    日志12.03
    监听短信数据库变化
    漫谈C语言及如何学习C语言(转)
    阅读短信
    在src文件中寻找短信数据库表
    拦截短信示例1
  • 原文地址:https://www.cnblogs.com/arcer/p/3083050.html
Copyright © 2020-2023  润新知