【閃回特性之閃回查詢】使用閃回查詢(select as of)

Hoegh發表於2015-04-15
        Flashback Query可以提取較早時間的資料,該查詢可以指定時間點TIMESTAMP或者SCN,返回的是指定時間點(或SCN)的已提交資料。 閃回查詢的主要作用包括:恢復丟失資料或者撤銷錯誤、已提交的變化;比較當前資料與之前資料的差異;檢查特定時間事務資料的狀態等。

       Flashback Query這一特性,最常被應用的就是修復誤操作的資料。注意,這並不是說Flashback Query能夠恢復資料。Flashback Query本身不會恢復任何操作或修改,也不能告訴你做過什麼操作或修改,實際上Flashback Query特性實際應用時,是基於標準SELECT的擴充套件,藉助該特效能夠讓使用者查詢到指定時間點的表中的記錄,相當於擁有了看到過去的能力,至於恢復,可以透過執行INSERT TABLE SELECT或CREATE TABLE AS SELECT來實現。

       下面以scott使用者下emp表為例,演示一下閃回查詢功能。
1.首先,查詢系統當前時間和SCN號,以及當前時間點的emp表資料。

點選(此處)摺疊或開啟

  1. SQL> select e.empno,e.ename from scott.emp e order by 1;

  2.      EMPNO ENAME
  3. ---------- ----------
  4.       7369 SMITH
  5.       7499 ALLEN
  6.       7521 WARD
  7.       7566 JONES
  8.       7654 MARTIN
  9.       7698 BLAKE
  10.       7782 CLARK
  11.       7788 SCOTT
  12.       7839 KING
  13.       7844 TURNER
  14.       7876 ADAMS
  15.       7900 JAMES
  16.       7902 FORD
  17.       7934 MILLER

  18. 14 rows selected.

  19. SQL> select systimestamp from dual;

  20. SYSTIMESTAMP
  21. ---------------------------------------------------------------------------
  22. 15-APR-15 03.27.35.121708 PM +08:00

  23. SQL> select current_scn from v$database;

  24. CURRENT_SCN
  25. -----------
  26.     1154393

  27. SQL>

2.刪除員工號碼小於7600的員工,並提交;然後,查詢當前資料。

點選(此處)摺疊或開啟

  1. SQL>
  2. SQL> delete from scott.emp where empno<7600;

  3. 4 rows deleted.

  4. SQL> commit;

  5. Commit complete.

  6. SQL>
  7. SQL> select e.empno,e.ename from scott.emp e order by 1;

  8.      EMPNO ENAME
  9. ---------- ----------
  10.       7654 MARTIN
  11.       7698 BLAKE
  12.       7782 CLARK
  13.       7788 SCOTT
  14.       7839 KING
  15.       7844 TURNER
  16.       7876 ADAMS
  17.       7900 JAMES
  18.       7902 FORD
  19.       7934 MILLER

  20. 10 rows selected.

  21. SQL>
3.分別使用TIMESTAMP和SCN來進行閃回查詢,並且查詢當前資料,好做比較。

點選(此處)摺疊或開啟

  1. SQL> select * from scott.emp
  2.   2 as of timestamp
  3.   3 to_timestamp(\'2015-04-15 03:27:35\',\'YYYY-MM-DD HH:MI:SS\');

  4. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  5. ----- ---------- --------- ---------- --------- ---------- ---------- ----------
  6.  7369 SMITH CLERK 7902 17-DEC-80 800 20
  7.  7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
  8.  7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
  9.  7566 JONES MANAGER 7839 02-APR-81 2975 20
  10.  7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
  11.  7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
  12.  7782 CLARK MANAGER 7839 09-JUN-81 2450 10
  13.  7788 SCOTT ANALYST 7566 19-APR-87 3000 20
  14.  7839 KING PRESIDENT 17-NOV-81 5000 10
  15.  7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
  16.  7876 ADAMS CLERK 7788 23-MAY-87 1100 20
  17.  7900 JAMES CLERK 7698 03-DEC-81 950 30
  18.  7902 FORD ANALYST 7566 03-DEC-81 3000 20
  19.  7934 MILLER CLERK 7782 23-JAN-82 1300 10

  20. 14 rows selected.

  21. SQL>
  22. SQL>
  23. SQL> select * from scott.emp
  24.   2 as of scn 1154393;

  25. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  26. ----- ---------- --------- ---------- --------- ---------- ---------- ----------
  27.  7369 SMITH CLERK 7902 17-DEC-80 800 20
  28.  7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
  29.  7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
  30.  7566 JONES MANAGER 7839 02-APR-81 2975 20
  31.  7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
  32.  7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
  33.  7782 CLARK MANAGER 7839 09-JUN-81 2450 10
  34.  7788 SCOTT ANALYST 7566 19-APR-87 3000 20
  35.  7839 KING PRESIDENT 17-NOV-81 5000 10
  36.  7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
  37.  7876 ADAMS CLERK 7788 23-MAY-87 1100 20
  38.  7900 JAMES CLERK 7698 03-DEC-81 950 30
  39.  7902 FORD ANALYST 7566 03-DEC-81 3000 20
  40.  7934 MILLER CLERK 7782 23-JAN-82 1300 10

  41. 14 rows selected.

  42. SQL>
  43. SQL> select * from scott.emp;

  44. EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
  45. ----- ---------- --------- ---------- --------- ---------- ---------- ----------
  46.  7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
  47.  7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
  48.  7782 CLARK MANAGER 7839 09-JUN-81 2450 10
  49.  7788 SCOTT ANALYST 7566 19-APR-87 3000 20
  50.  7839 KING PRESIDENT 17-NOV-81 5000 10
  51.  7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
  52.  7876 ADAMS CLERK 7788 23-MAY-87 1100 20
  53.  7900 JAMES CLERK 7698 03-DEC-81 950 30
  54.  7902 FORD ANALYST 7566 03-DEC-81 3000 20
  55.  7934 MILLER CLERK 7782 23-JAN-82 1300 10

  56. 10 rows selected.

  57. SQL>
  58. SQL>
        如上述示例中所示,AS OF TIMESTAMP方式的使用非常方便,但是在某些情況下,我們建議使用AS OF SCN的方式執行Flashback Query。如需要對多個相互有主外來鍵約束的表進行恢復時,如果使用AS OF TIMESTAMP的方式,可能會由於時間點不統一的緣故造成資料選擇或插入失敗,透過AS OF SCN方式則能夠確保記錄處理的時間點一致。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-1578278/,如需轉載,請註明出處,否則將追究法律責任。

相關文章