flashback總結五之Flashback_Query_Version(上)

zhangshengdong發表於2011-11-28

    相對於Flashback Query的以點看物件狀態,那麼Flashback Version Query可以以面開看物件狀態。
    這樣根據歷史情況,DBA可以快速判斷資料在什麼地方出現錯誤,進而恢復到到之前的狀態。
    Flashback version Query中有一個偽列,是用來記錄每次commit之後,新產生的scn。

******************************個人操作********************************
SQL> insert into scott.emp values(7968,'sheng','CLERK',7902,to_date('2011-09-09'
,'YYYY-mm-dd'),'800','300',20);

已建立 1 行。

SQL> commit;

SQL> select ora_rowscn, empno from scott.emp;

ORA_ROWSCN      EMPNO
---------- ----------
   3466170       7369
   3466170       7499
   3466170       7521
   3466170       7566
   3466170       7654
   3466170       7698
   3466170       7782
   3466170       7788
   3466170       7839
   3466170       7844
   3466170       7876

ORA_ROWSCN      EMPNO
---------- ----------
   3466170       7900
   3466170       7902
   3466170       7934
   3466170       7968(7968出現,當前的scn也改變了)
   3466170       7964


再來插入一條看看,

SQL> insert into scott.emp values(7970,'dong','CLERK',7902,'2011-09-09','800','3
00',20);

已建立 1 行。

SQL> commit;

SQL> select ora_rowscn, empno from scott.emp;

ORA_ROWSCN      EMPNO
---------- ----------
   3466203       7369
   3466203       7499
   3466203       7521
   3466203       7566
   3466203       7654
   3466203       7698
   3466203       7782
   3466203       7788
   3466203       7839
   3466203       7844
   3466203       7876

ORA_ROWSCN      EMPNO
---------- ----------
   3466203       7900
   3466203       7902
   3466203       7934
   3466203       7970(7970出現,ORA_ROWSCN記錄也相應的改變了)
   3466203       7968
   3466203       7964
  
SQL> Select versions_xid,versions_startscn,versions_endscn,
     DECODE(versions_operation,'I','Insert','U','Update','D','Delete', 'Original') "Operation", empno from scott.emp
     versions between scn minvalue and maxvalue;

VERSIONS_XID     VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio      EMPNO
---------------- ----------------- --------------- -------- ----------
                                                   Original       7369
                                                   Original       7499
                                                   Original       7521
                                                   Original       7566
                                                   Original       7654
                                                   Original       7698
                                                   Original       7782
                                                   Original       7788
                                                   Original       7839
                                                   Original       7844
                                                   Original       7876

VERSIONS_XID     VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio      EMPNO
---------------- ----------------- --------------- -------- ----------
                                                   Original       7900
                                                   Original       7902
                                                   Original       7934
                                                   Original       7964
09001F00AF040000           3466170                 Insert         7968
09000D00B0040000           3466203                 Insert         7970

已選擇17行。

從上面語句可以看出,Operation的操作,有兩條插入操作,分別對應的scn是3466170和3466203。
如果,你想退回到,插入7970之前,可以進行如下操作:

**************************這個是flashback table的概念********************************
SQL> flashback table scott.emp to scn  3466170;
flashback table scott.emp to scn  3466170
                      *
第 1 行出現錯誤:
ORA-08189: 因為未啟用行移動功能, 不能閃回表

由於報錯,我可以檢視row_movement是否啟用
SQL> select row_movement,table_name from user_tables where table_name='EMP';

ROW_MOVE TABLE_NAME
-------- ------------------------------
DISABLED EMP

(
--啟用
JSSWEB> ALTER TABLE table_name ENABLE ROW MOVEMENT;
表已更改。
--禁止
JSSWEB> ALTER TABLE table_name DISABLE ROW MOVEMENT;
表已更改。
 這個是啟用和禁用語句
)

SQL> ALTER TABLE EMP ENABLE ROW MOVEMENT;

表已更改。

SQL> flashback table scott.emp to scn  3466170;

閃回完成。

**************************這個是flashback table的概念********************************
SQL> select ora_rowscn, empno from scott.emp;

ORA_ROWSCN      EMPNO
---------- ----------
   3468264       7369
   3468264       7499
   3468264       7521
   3468264       7566
   3468264       7654
   3468264       7698
   3468264       7782
   3468264       7788
   3468264       7839
   3468264       7844
   3468264       7876

ORA_ROWSCN      EMPNO
---------- ----------
   3468264       7900
   3468264       7902
   3468264       7934
   3468264       7968
   3468264       7964

已選擇16行。(可以看到,原來插入的7970已經沒有了,我們回到了插入7970之前的狀態)


現在可以分析閃回之後,flashback_Qurey_Version的狀態是什麼樣子的?

SQL> Select versions_xid,versions_startscn,versions_endscn,
  2       DECODE(versions_operation,'I','Insert','U','Update','D','Delete', 'Or
ginal') "Operation", empno from scott.emp
  3       versions between scn minvalue and maxvalue;

VERSIONS_XID     VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio      EMPNO
---------------- ----------------- --------------- -------- ----------
01001300D2030000           3468264                 Insert         7369
01001300D2030000           3468264                 Delete         7369
                                           3468264 Original       7369
01001300D2030000           3468264                 Insert         7499
01001300D2030000           3468264                 Delete         7499
                                           3468264 Original       7499
01001300D2030000           3468264                 Insert         7521
01001300D2030000           3468264                 Delete         7521
                                           3468264 Original       7521
01001300D2030000           3468264                 Insert         7566
01001300D2030000           3468264                 Delete         7566

VERSIONS_XID     VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio      EMPNO
---------------- ----------------- --------------- -------- ----------
                                           3468264 Original       7566
01001300D2030000           3468264                 Insert         7654
01001300D2030000           3468264                 Delete         7654
                                           3468264 Original       7654
01001300D2030000           3468264                 Insert         7698
01001300D2030000           3468264                 Delete         7698
                                           3468264 Original       7698
01001300D2030000           3468264                 Insert         7782
01001300D2030000           3468264                 Delete         7782
                                           3468264 Original       7782
01001300D2030000           3468264                 Insert         7788

VERSIONS_XID     VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio      EMPNO
---------------- ----------------- --------------- -------- ----------
01001300D2030000           3468264                 Delete         7788
                                           3468264 Original       7788
01001300D2030000           3468264                 Insert         7839
01001300D2030000           3468264                 Delete         7839
                                           3468264 Original       7839
01001300D2030000           3468264                 Insert         7844
01001300D2030000           3468264                 Delete         7844
                                           3468264 Original       7844
01001300D2030000           3468264                 Insert         7876
01001300D2030000           3468264                 Delete         7876
                                           3468264 Original       7876

VERSIONS_XID     VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio      EMPNO
---------------- ----------------- --------------- -------- ----------
01001300D2030000           3468264                 Insert         7900
01001300D2030000           3468264                 Delete         7900
                                           3468264 Original       7900
01001300D2030000           3468264                 Insert         7902
01001300D2030000           3468264                 Delete         7902
                                           3468264 Original       7902
01001300D2030000           3468264                 Insert         7934
01001300D2030000           3468264                 Delete         7934
                                           3468264 Original       7934
01001300D2030000           3468264                 Insert         7964
01001300D2030000           3468264                 Delete         7964

VERSIONS_XID     VERSIONS_STARTSCN VERSIONS_ENDSCN Operatio      EMPNO
---------------- ----------------- --------------- -------- ----------
                                           3468264 Original       7964
01001300D2030000           3468264                 Insert         7968
01001300D2030000           3468264                 Delete         7968
                                           3468264 Original       7968
01001300D2030000           3468264                 Delete         7970
                                           3468264 Original       7970

已選擇50行。

(可能有點長,不過耐心的觀察可以發現,每一個都是有一個insert和delete的操作,這個就是閃回它做的操作,
最後一個7970做了delete之後,就沒有insert了,所以7970被刪除了)

 

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

相關文章