【徵文】應用oracle flashback(3.2)--Flashback Database操作示例

junsansi發表於2008-07-09

Flashback database即可以在rman中執行,也可以在sql*plus中執行,其命令格式都是一樣的,在這個示例中,我們所有操作都是在sql*plus中執行

A. 檢查是否啟動了flash recovery area:

JSSWEB> show parameter db_recovery_file

NAME                                 TYPE        VALUE

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

db_recovery_file_dest                string      f:\oracle\oradata\jssweb\recoveryarea\

db_recovery_file_dest_size           big integer 2G

B. 檢查是否啟用了歸檔

JSSWEB> archive log list;

資料庫日誌模式            存檔模式

自動存檔             啟用

存檔終點            USE_DB_RECOVERY_FILE_DEST

最早的聯機日誌序列     51

下一個存檔日誌序列   53

當前日誌序列           53

C. 檢查是否啟用了flashback database和force_logging

JSSWEB> select flashback_on,force_logging from v$database;

FLASHBACK_ON       FOR

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

YES                YES

D. 查詢當前的scn

JSSWEB> SELECT CURRENT_SCN FROM V$DATABASE;

CURRENT_SCN

-----------

     686384

JSSWEB> select current_scn from v$database;

CURRENT_SCN

-----------

     213749

E. 模擬誤刪除操作

JSSWEB> conn jss/jss

已連線。

JSSWEB> drop table jss_tb1;

表已刪除。

JSSWEB> delete jss_tb2 where id>5;

已刪除15行。

JSSWEB> select count(0) from jss_tb2;

  COUNT(0)

----------

         5

JSSWEB> commit;

提交完成。

F.  重新啟動到mount狀態,然後執行恢復

JSSWEB> conn / as sysdba

已連線。

JSSWEB> shutdown immediate

資料庫已經關閉。

已經解除安裝資料庫。

ORACLE 例程已經關閉。

JSSWEB> startup mount

ORACLE 例程已經啟動。

Total System Global Area  343932928 bytes

Fixed Size                  1296620 bytes

Variable Size             125830932 bytes

Database Buffers          209715200 bytes

Redo Buffers                7090176 bytes

資料庫裝載完畢。

JSSWEB> flashback database to scn 686384;

閃回完成。

提示:此處flashback database to timestamp也是一樣的,不過你需要估計好恢復到的時間點。

注意此處,在你執行完flashback database命令之後,oracle提供了兩種方式讓你修復資料庫:

第一種直接alter database open resetlogs開啟資料庫,當然,指定scn或者timestamp時間點之後產生的資料統統丟失。

另一種方式是先執行alter database open read only命令以read-only模式開啟資料庫,然後立刻通過邏輯匯出的方式將誤操作涉及表的資料匯出,再執行recover database命令以重新應用資料庫產生的redo,將資料庫修復到flashback database操作前的狀態,然後再通過邏輯匯入的方式,將之前誤操作的表重新匯入,這樣的話對現有資料的影響最小,不會有資料丟失。

由於是演示過程,為了更簡便和快速,我們這裡採用方法一中提示的方式,但如果是比較重要的資料庫的話,你要採用哪種方式,就需要仔細評估一下了。

G. 開啟資料庫

JSSWEB> alter database open resetlogs;

資料庫已更改。

H. 驗證資料

JSSWEB> conn jss/jss

已連線。

JSSWEB> select *from tab;

TNAME                          TABTYPE  CLUSTERID

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

JSS_TB1                        TABLE

TP                             TABLE

JSS_TB2                        TABLE

JSSWEB> select count(0) from jss_tb2;

  COUNT(0)

----------

        20

如上,之前的誤運算元據均已恢復。

可以看到這個過程非常迅速(當然跟我們操作的資料量小也有很大關係),這甚至都不算是在做恢復,從頭到尾,我們都沒有執行任何restore,也沒有recover的操作,這就是flashback database的優勢,速度

全文完~~~~~~~~~~~ 

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

檢視前面的連載:

(3.1)--Flashback Database介紹

(2.3)--Flashback Table之注意事項

(2.2)--Flashback Table之從UNDO中恢復

(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-374713/,如需轉載,請註明出處,否則將追究法律責任。

相關文章