【徵文】應用oracle flashback(2.2)--Flashback Table之從UNDO中恢復

junsansi發表於2008-07-04

某些時候,我們要處理的表並不是被意外刪除,而是被反覆修改過多次,希望能回覆到之前的某個時間點,通過前面的學習,你一定會說沒問題啊,藉助flashback query就可以,沒錯,flashback query確實可以,但flashback query只是查詢出記錄,如果想做恢復還需要寫出相應的insert或update,也許還需要相當多的where條件做判斷,一個不甚,可能恢復的資料就是錯誤的。老闆又沒在跟兒前站著,我們沒必要在這個時刻用這種方式展示我們嫻熟的指法,因此,我們需要更高效更嚴謹更簡便的方式:flashback table tbname to scn/timestamp,助你達成夢想,詳情請諮詢,o錯了,應該是詳情請接著往下看。

Scn和timestamp的用法通過前面flashback query的學習大家應該都比較熟了,flashback table中指定scn或timestamp的用法與上相同,舉個例子吧:

有資料如下:

JSSWEB> select *from jss_tb1;

        ID VL

---------- --------------------

         6 F

         7 G

         8 H

         9 I

        11 K

        12 L

        13 M

        14 N

        15 O

        10 J

記錄下當前系統scn(如果不知道確切的scn,恢復時只能通過時間,但正如前文中講到的,時間並不精確,如果通過指定timestamp恢復的話,需要你清楚瞭解所做的操作大概是在什麼時間)

JSSWEB> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

                  593480

我們對該表做些操作:

JSSWEB> update jss_tb1 set id=id+100 where id>10;

已更新5行。

JSSWEB> insert into jss_tb1 values (21,'Z');

已建立 1 行。

JSSWEB> delete jss_tb1 where id=8;

已刪除 1 行。

JSSWEB> commit;

提交完成。

JSSWEB> select *from jss_tb1;

        ID VL

---------- --------------------

        21 Z

         6 F

         7 G

         9 I

       111 K

       112 L

       113 M

       114 N

       115 O

        10 J

已選擇10行。

這些都屬於常規操作,如果最終發現這些操作都屬於誤操作,需要恢復回表最初的形式,藉助flashback query當然可以實現:

JSSWEB> select *from jss_tb1 as of scn 593480;

        ID VL

---------- --------------------

         6 F

         7 G

         8 H

         9 I

        11 K

        12 L

        13 M

        14 N

        15 O

        10 J

已選擇10行。

查詢能夠寫出來,就一定能將表更新回去,不過既使是針對我們測試時所做過的簡單操作(新增、刪除、修改),更新的語句就已經需要寫的很複雜了,因為我們需要分別判斷新增、刪除、修改過的記錄。

幸好,我們還有flashback table,因此我們只需要指定一個scn或timestamp即可。

JSSWEB> flashback table jss_tb1 to scn 593480;

閃回完成。

JSSWEB> select *from jss_tb1;

        ID VL

---------- --------------------

         6 F

         7 G

         8 H

         9 I

        11 K

        12 L

        13 M

        14 N

        15 O

        10 J

已選擇10行。

所有記錄均已回覆到指定scn時的狀態。

===================================

檢視前面的連載:

(2.1)--Flashback Table之從RECYCLEBIN中恢復

(1.5)--閃回查詢之制約因素

(1.4)--閃回查詢之Transaction query

(1.3)--閃回查詢之Versions between

(1.2)--閃回查詢之As of scn

(1.1)--閃回查詢之As of timestamp

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

相關文章