一種快速恢復資料庫的方法——Flashback DB

yb708發表於2013-12-08

一種快速恢復資料庫的方法——Flashback DB

在工作中有同事這樣的場景:在一些特定的情況下在時間點t1需要對我們的產品升級,升級需要在資料庫中執行了一系列指令碼,而隨後我們又希望放棄本次變更,使資料庫能恢復到執行升級前時間點t1時的狀態,這是我們可以有兩種選擇,一種是進行資料庫的不完全恢復(DBPITR,這種方式需要先對資料庫所有檔案進行一次恢復);而另一種則是使用資料庫的Flashback Database特性,直接利用資料塊的前映象使資料庫進行回滾,使資料庫恢復到之前的一個時間點的狀態。

Flashback Database的主要原理是資料庫首先在被修改過的資料塊上應用相應需要恢復的時間點上的對應被修改過的資料塊的前映象(Flashback logs),然後應用歸檔日誌及重做日誌將資料庫恢復到這個時間點的一致性狀態,可見Flashback Database主要依賴的資訊為Flashback logs和歸檔日誌。由於這種方式沒有恢復資料檔案的過程,因此相比DBPITR方式的效率會更高。

在使用Flashback Database的過程中有一個非常重要的觀念就是RESTORE POINT,它可以簡單認為就是資料庫可以閃回的一個時間點,RESTORE POINT分為兩種:Normal Restore PointsGuaranteed Restore Points,其中使用Normal Restore Points需要注意開啟資料庫的flashback模式:ALTER DATABASE FLASHBACK ON;使用Guaranteed Restore Points不需要開啟flashback模式。

在配置和執行一個Flashback Database前必要了解這樣幾個概念:

1)  Flash recover area 包含的內容(主要為Online redo log filesArchived redo log filesBackup piecesFlashback logs),如何設定(DB_RECOVERY_FILE_DEST_SIZEDB_RECOVERY_FILE_DEST),大小評估(即考慮Flash recover area 包含的內容的預計總和大小)

2)  Flashback logs包含的內容(所有被修改的資料塊的block images),如何設定(ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=4320; ALTER DATABASE FLASHBACK ON;

在配置和執行一個Flashback Database的過程非常簡單,步驟如下:

1、設定資料庫快速恢復區Flash recover area

SYS@test 2013-12-08 18:18:38> alter system set db_recovery_file_dest_size=1G scope=both;

系統已更改。

SYS@test 2013-12-08 18:18:48> alter system set db_recovery_file_dest='D:\oracle\flash_recovery_area' scope=both;

系統已更改。

 

SYS@test 2013-12-08 18:18:57> show parameter recover

NAME                                 TYPE        VALUE

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

db_recovery_file_dest                string      D:\oracle\flash_recovery_area

db_recovery_file_dest_size           big integer 1G

recovery_parallelism                 integer     0

2、設定恢復點

SYS@test 2013-12-08 18:19:55> select *from yb.t1;

         A B

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

         1 aaaaa

         2 dfdsaf

 

SYS@test 2013-12-08 18:19:58>  create restore point yb_before_upgrade guarantee flashback database ;

還原點已建立。

 

SYS@test 2013-12-08 18:20:13> SELECT * FROM   V$RECOVERY_AREA_USAGE;

FILE_TYPE            PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES

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

CONTROL FILE                          0                         0               0

REDO LOG                              0                         0               0

ARCHIVED LOG                      18.57                         0               5

BACKUP PIECE                          0                         0               0

IMAGE COPY                            0                         0               0

FLASHBACK LOG                       .76                         0               1

FOREIGN ARCHIVED LOG                  0                         0               0

 

已選擇7行。

3、執行資料修改

SYS@test 2013-12-08 18:21:07> truncate table yb.t1;

表被截斷。

 

SYS@test 2013-12-08 18:21:11> select *from yb.t1;

未選定行

 

SYS@test 2013-12-08 18:25:08> select name, scn, time, database_incarnation#, guarantee_flashback_database from v$restore_point;

 

NAME                       SCN TIME                                     DATABASE_INCARNATION# GUAR

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

YB_BEFORE_UPGRADE      1322444 08-12-13 06.20.12.000000000 下午                           2 YES

4、使用Flashback閃回資料庫

SYS@test 2013-12-08 18:26:41> shutdown immediate

資料庫已經關閉。

已經解除安裝資料庫。

ORACLE 例程已經關閉。

SYS@test 2013-12-08 18:27:17> startup mount

ORACLE 例程已經啟動。

 

Total System Global Area  534462464 bytes

Fixed Size                  2177456 bytes

Variable Size             398460496 bytes

Database Buffers          125829120 bytes

Redo Buffers                7995392 bytes

資料庫裝載完畢。

 

SYS@test 08-12-13> flashback database to restore point yb_before_upgrade ;

閃回完成。

5、將資料庫開啟到只讀模式下進行資料驗證(說明:可以查詢核心表來確認資料庫是否恢復到希望的時間,如果需要可以進行多次閃回)

 

SYS@test 08-12-13> alter database open read only;

資料庫已更改。

 

SYS@test 08-12-13> select *from yb.t1;

         A B

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

         1 aaaaa

         2 dfdsaf

6、開啟資料庫,提供正常服務

SYS@test 08-12-13> shutdown immeidate;

SP2-0717: 非法的 SHUTDOWN 選項

SYS@test 08-12-13> shutdown immediate;

資料庫已經關閉。

已經解除安裝資料庫。

ORACLE 例程已經關閉。

SYS@test 08-12-13> startup mount;

ORACLE 例程已經啟動。

 

Total System Global Area  534462464 bytes

Fixed Size                  2177456 bytes

Variable Size             398460496 bytes

Database Buffers          125829120 bytes

Redo Buffers                7995392 bytes

資料庫裝載完畢。

SYS@test 08-12-13>

SYS@test 08-12-13> alter database open resetlogs;

資料庫已更改。

 

SYS@test 08-12-13> select *from yb.t1 ;

         A B

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

         1 aaaaa

         2 dfdsaf

7、清理不再需要的閃回點,使得flashback log日誌被資料庫自動回收

SYS@test 08-12-13> select flashback_on from v$database ;

FLASHBACK_ON

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

RESTORE POINT ONLY

 

SYS@test 08-12-13> DROP RESTORE POINT yb_before_upgrade;

還原點已刪除。

 

SYS@test 08-12-13> select name, scn, time, database_incarnation#, guarantee_flashback_database from v$restore_point;

未選定行

 

SYS@test 08-12-13> select flashback_on from v$database ;

FLASHBACK_ON

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

NO

 

SYS@test 08-12-13> SELECT * FROM   V$RECOVERY_AREA_USAGE;

FILE_TYPE            PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES

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

CONTROL FILE                          0                         0               0

REDO LOG                              0                         0               0

ARCHIVED LOG                      27.54                         0               8

BACKUP PIECE                          0                         0               0

IMAGE COPY                            0                         0               0

FLASHBACK LOG                         0                         0               0

FOREIGN ARCHIVED LOG                  0                         0               0

 

已選擇7行。


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

相關文章