代码改变世界

闪回版本查询

2019-06-27 14:53  那个,我  阅读(480)  评论(0编辑  收藏  举报

闪回版本查询

1. 创建测试案例

sqlplus / as sysdba
scott@ORCL> select * from SCOTT.emp where sal=1300;

    EMPNO ENAME               JOB                       MGR HIREDATE                   SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- ------------------- ---------- ---------- ----------
     7934 AAA                 CLERK                    7782 1982-01-23 00:00:00       1300                    10

scott@ORCL> update SCOTT.emp set empno=7910 ,ename='ABC' where SAL=1300;

1 row updated.

scott@ORCL> commit;

Commit complete.

scott@ORCL> select * from SCOTT.emp where sal=1300;

    EMPNO ENAME               JOB                       MGR HIREDATE                   SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- ------------------- ---------- ---------- ----------
     7910 ABC                 CLERK                    7782 1982-01-23 00:00:00       1300                    10

2. 闪回版本查询

SQLPLUS / AS SYSDBA
COL VERSIONS_STARTTIME FOR A25
COL VERSIONS_ENDTIME FOR A25

SELECT versions_startscn,
      versions_starttime,
      versions_endscn,
      versions_endtime,
      versions_xid,
      versions_operation,
      empno,
      ename
 FROM scott.emp VERSIONS BETWEEN TIMESTAMP SYSDATE - 5 / 1440 AND SYSDATE --时间注意调整
WHERE sal = 1300;

VERSIONS_STARTSCN VERSIONS_STARTTIME       VERSIONS_ENDSCN VERSIONS_ENDTIME         VERSIONS_XID     VE     EMPNO ENAME
----------------- ------------------------- --------------- ------------------------- ---------------- -- ---------- --------------------
         1850518 26-JUN-19 06.57.40 AM                                               09000000FD040000 U        7910 ABC
                                                   1850518 26-JUN-19 06.57.40 AM                               7934 AAA                            7934 AAA

3. 闪回表到历史版本

SQLPLUS / AS SYSDBA
ALTER TABLE SCOTT.EMP ENABLE ROW MOVEMENT;
FLASHBACK TABLE SCOTT.EMP TO SCN 1850517;
SELECT * FROM SCOTT.EMP WHERE SAL=1300;
--执行结果
sys@ORCL> ALTER TABLE SCOTT.EMP ENABLE ROW MOVEMENT;

Table altered.

sys@ORCL> FLASHBACK TABLE SCOTT.EMP TO SCN 1850517; --注意这里的SCN和前面查询的SCN

Flashback complete.

sys@ORCL> SELECT * FROM SCOTT.EMP WHERE SAL=1300;

    EMPNO ENAME               JOB                       MGR HIREDATE                   SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- ------------------- ---------- ---------- ----------
     7934 AAA                 CLERK                    7782 1982-01-23 00:00:00       1300                    10

可见数据已经恢复到指定版本

参考

【诗檀学院】ORACLE 11g OCM考试学习材料-手动实操课程