zoukankan      html  css  js  c++  java
  • 闪回表

    闪回表
    oracle闪回表给予了DBA将一个或一组表快速恢复到过去的指定时间点并且不需要将数据库脱机。在大多数情况下闪回表与按时间点恢复操作相比消除了大量的操作。闪回表还原表时会自动维护与表相关的属性比如,当前索引,触发器和约束,并且不需要DBA找出和还原相关的属性。使用闪回表能将表回退到之前SCN或时间所对应的状态。

    闪回表使用undo表空间中的信息来还原表。不需要从备份中还原任何数据,且在执行闪回表操作时数据库仍然可以使用。

    使用闪回表的条件
    使用闪回表有以下条件:
    1.必须对表启用行移动。可以执行下面的语句来对表启用行移动:
    alter table tablename enable row movement;

    2.用户必须被授予了flashback any table的系统权限或者对特定的表有flashback对象权限

    3.用户对于特定的表必须有select,insert,delete和alter权限

    4.undo表空间中保留的undo信息足够能满足flashback table操作回退到所指定的时间点或SCN

    下面测试闪回表
    1.对表emp启用行移动

    SQL> alter table emp enable row movement;
    
    Table altered.
    
    
    SQL> select * from emp;
    
         EMPNO ENAME      JOB              MGR HIREDATE            SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- ------------ ---------- ---------- ----------
          7369 SMITH      CLERK           7902 17-DEC-80           800                    20
          7499 ALLEN      SALESMAN        7698 20-FEB-81          1600        300         30
          7521 WARD       SALESMAN        7698 22-FEB-81          1250        500         30
          7566 JONES      MANAGER         7839 02-APR-81          2975                    20
          7654 MARTIN     SALESMAN        7698 28-SEP-81          1250       1400         30
          7698 BLAKE      MANAGER         7839 01-MAY-81          2850                    30
          7782 CLARK      MANAGER         7839 09-JUN-81          2450                    10
          7788 SCOTT      ANALYST         7566 19-APR-87          3000                    20
          7839 KING       PRESIDENT            17-NOV-81          5000                    10
          7844 TURNER     SALESMAN        7698 08-SEP-81          1500          0         30
          7876 ADAMS      CLERK           7788 23-MAY-87          1100                    20
          7900 JAMES      CLERK           7698 03-DEC-81           950                    30
          7902 FORD       ANALYST         7566 03-DEC-81          3000                    20
          7934 MILLER     CLERK           7782 23-JAN-82          1300                    10
    
    14 rows selected.
    

    2.在删除表emp的记录之前记录一下时间或者SCN

    SQL> select current_scn from v$database;
    
    CURRENT_SCN
    -----------
        3077391
    
    SQL> select sysdate from dual;
    
    SYSDATE
    -------------------
    2015-02-02 20:50:39
    

    3.删除表emp的记录

    SQL> delete from emp;
    
    14 rows deleted.
    
    SQL> commit;
    
    Commit complete.
    
    SQL> select * from emp;
    
    no rows selected
    

    4.执行闪回表将表emp的内容回退到删除之前
    使用flashback table tablename to scn的命令如下:

    SQL> flashback table emp to scn 3077391;
    
    Flashback complete.
    
    SQL> select * from emp;
    
         EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
          7369 SMITH      CLERK           7902 1980-12-17 00:00:00        800                    20
          7499 ALLEN      SALESMAN        7698 1981-02-20 00:00:00       1600        300         30
          7521 WARD       SALESMAN        7698 1981-02-22 00:00:00       1250        500         30
          7566 JONES      MANAGER         7839 1981-04-02 00:00:00       2975                    20
          7654 MARTIN     SALESMAN        7698 1981-09-28 00:00:00       1250       1400         30
          7698 BLAKE      MANAGER         7839 1981-05-01 00:00:00       2850                    30
          7782 CLARK      MANAGER         7839 1981-06-09 00:00:00       2450                    10
          7788 SCOTT      ANALYST         7566 1987-04-19 00:00:00       3000                    20
          7839 KING       PRESIDENT            1981-11-17 00:00:00       5000                    10
          7844 TURNER     SALESMAN        7698 1981-09-08 00:00:00       1500          0         30
          7876 ADAMS      CLERK           7788 1987-05-23 00:00:00       1100                    20
          7900 JAMES      CLERK           7698 1981-12-03 00:00:00        950                    30
          7902 FORD       ANALYST         7566 1981-12-03 00:00:00       3000                    20
          7934 MILLER     CLERK           7782 1982-01-23 00:00:00       1300                    10
    
    14 rows selected.
    

    使用flashback table tablename to timestamp的命令如下:

    SQL> flashback table emp to timestamp to_timestamp('2015-02-02 20:50:39','yyyy-mm-dd hh24:mi:ss');
    
    Flashback complete.
    
    SQL> select * from emp;
    
         EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
          7369 SMITH      CLERK           7902 1980-12-17 00:00:00        800                    20
          7499 ALLEN      SALESMAN        7698 1981-02-20 00:00:00       1600        300         30
          7521 WARD       SALESMAN        7698 1981-02-22 00:00:00       1250        500         30
          7566 JONES      MANAGER         7839 1981-04-02 00:00:00       2975                    20
          7654 MARTIN     SALESMAN        7698 1981-09-28 00:00:00       1250       1400         30
          7698 BLAKE      MANAGER         7839 1981-05-01 00:00:00       2850                    30
          7782 CLARK      MANAGER         7839 1981-06-09 00:00:00       2450                    10
          7788 SCOTT      ANALYST         7566 1987-04-19 00:00:00       3000                    20
          7839 KING       PRESIDENT            1981-11-17 00:00:00       5000                    10
          7844 TURNER     SALESMAN        7698 1981-09-08 00:00:00       1500          0         30
          7876 ADAMS      CLERK           7788 1987-05-23 00:00:00       1100                    20
          7900 JAMES      CLERK           7698 1981-12-03 00:00:00        950                    30
          7902 FORD       ANALYST         7566 1981-12-03 00:00:00       3000                    20
          7934 MILLER     CLERK           7782 1982-01-23 00:00:00       1300                    10
    
    14 rows selected.
    

    注意:timestamp到SCN之间的映射不总是精确的,当使用timestamp作为flashback table语句的时间点,闪回表的真实时间点与由to_timestamp所指定的时间点大约有三秒钟的差异。

    默认情况下,在执行flashback table操作之前数据库对受影响的表禁用了触发器,将表闪回到所指定的时间点后,在对表执行操作之前启用触发器。如果想让表在执行flashback操作时启用触发器,那么可以在flashback table语句中加入enable triggers子句。

    SQL> flashback table emp to timestamp to_timestamp('2015-02-02 20:50:39','yyyy-mm-dd hh24:mi:ss') enable triggers;
    
    Flashback complete.
    
    SQL> select * from emp;
    
         EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
          7369 SMITH      CLERK           7902 1980-12-17 00:00:00        800                    20
          7499 ALLEN      SALESMAN        7698 1981-02-20 00:00:00       1600        300         30
          7521 WARD       SALESMAN        7698 1981-02-22 00:00:00       1250        500         30
          7566 JONES      MANAGER         7839 1981-04-02 00:00:00       2975                    20
          7654 MARTIN     SALESMAN        7698 1981-09-28 00:00:00       1250       1400         30
          7698 BLAKE      MANAGER         7839 1981-05-01 00:00:00       2850                    30
          7782 CLARK      MANAGER         7839 1981-06-09 00:00:00       2450                    10
          7788 SCOTT      ANALYST         7566 1987-04-19 00:00:00       3000                    20
          7839 KING       PRESIDENT            1981-11-17 00:00:00       5000                    10
          7844 TURNER     SALESMAN        7698 1981-09-08 00:00:00       1500          0         30
          7876 ADAMS      CLERK           7788 1987-05-23 00:00:00       1100                    20
          7900 JAMES      CLERK           7698 1981-12-03 00:00:00        950                    30
          7902 FORD       ANALYST         7566 1981-12-03 00:00:00       3000                    20
          7934 MILLER     CLERK           7782 1982-01-23 00:00:00       1300                    10
    
    14 rows selected.
  • 相关阅读:
    有关线程与进程的参考资料
    [Notes] 各种数据源配置
    [Notes] 显卡更新后docker nvidia-runtime不可用
    [Tips] numpy diff
    [Tips] vs code ssh remote情况下如何选者python
    RSA算法之学习
    湖南大学推荐书《社会学大纲》阅读有感 其一
    解决某些应用程序阻止了IDM集成到浏览器中的问题
    Oracle实现判断功能三种方式总结
    JS实现数字每三位加逗号
  • 原文地址:https://www.cnblogs.com/travel6868/p/5019249.html
Copyright © 2011-2022 走看看