一種快速恢復資料庫的方法——Flashback DB
一種快速恢復資料庫的方法——Flashback DB
在工作中有同事這樣的場景:在一些特定的情況下在時間點t1需要對我們的產品升級,升級需要在資料庫中執行了一系列指令碼,而隨後我們又希望放棄本次變更,使資料庫能恢復到執行升級前時間點t1時的狀態,這是我們可以有兩種選擇,一種是進行資料庫的不完全恢復(DBPITR,這種方式需要先對資料庫所有檔案進行一次恢復);而另一種則是使用資料庫的Flashback Database特性,直接利用資料塊的前映象使資料庫進行回滾,使資料庫恢復到之前的一個時間點的狀態。
Flashback Database的主要原理是資料庫首先在被修改過的資料塊上應用相應需要恢復的時間點上的對應被修改過的資料塊的前映象(Flashback logs),然後應用歸檔日誌及重做日誌將資料庫恢復到這個時間點的一致性狀態,可見Flashback Database主要依賴的資訊為Flashback logs和歸檔日誌。由於這種方式沒有恢復資料檔案的過程,因此相比DBPITR方式的效率會更高。
在使用Flashback Database的過程中有一個非常重要的觀念就是RESTORE POINT,它可以簡單認為就是資料庫可以閃回的一個時間點,RESTORE POINT分為兩種:Normal Restore Points和Guaranteed Restore Points,其中使用Normal Restore Points需要注意開啟資料庫的flashback模式:ALTER DATABASE FLASHBACK ON;使用Guaranteed Restore Points不需要開啟flashback模式。
在配置和執行一個Flashback Database前必要了解這樣幾個概念:
1) Flash recover area 包含的內容(主要為Online redo log files、Archived redo log files、Backup pieces、Flashback logs),如何設定(DB_RECOVERY_FILE_DEST_SIZE和DB_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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Flashback Transaction方法來恢復資料表資料
- Oracle資料庫備份與恢復的三種方法Oracle資料庫
- Dedecms資料庫恢復與備份的兩種方法資料庫
- 100種資料恢復的方法?!資料恢復
- Oracle資料庫備份與恢復的三種方法(轉)Oracle資料庫
- DB2的資料庫備份與恢復DB2資料庫
- DB2資料庫的備份和恢復DB2資料庫
- flashback實現資料快速復原
- DB庫伺服器重灌OS的快速恢復配置伺服器
- 幾種場景的資料庫恢復資料庫
- db2備份和恢復資料庫DB2資料庫
- SqlServer資料庫恢復備份資料的方法SQLServer資料庫
- 資料庫資料恢復-ORACLE資料庫的常見故障&各種故障下的資料恢復可能性資料庫資料恢復Oracle
- 【資料庫資料恢復】SAP資料庫資料恢復案例資料庫資料恢復
- spfile誤修改導致資料庫無法啟動的另一種恢復方法資料庫
- 【資料庫資料恢復】透過恢復NDF檔案修復資料庫的資料恢復過程資料庫資料恢復
- 寶塔資料庫恢復 mysql資料庫丟失恢復 mysql資料庫刪除庫恢復 寶塔mysql資料庫恢復資料庫MySql
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- 【資料庫資料恢復】windows server下SqlServer資料庫的資料恢復資料庫資料恢復WindowsServerSQL
- Flashback Query恢復誤刪除資料(轉)
- 【資料庫資料恢復】Sql Server資料庫資料恢復案例資料庫資料恢復SQLServer
- 【資料庫資料恢復】Oracle資料庫誤truncate table的資料恢復案例資料庫資料恢復Oracle
- 【資料庫資料恢復】誤truncate table的Oracle資料庫資料恢復方案資料庫資料恢復Oracle
- 伺服器資料恢復—透過拼接資料庫碎片恢復SqlServer資料庫資料的資料恢復案例伺服器資料恢復資料庫SQLServer
- 順豐刪庫事件有感 - 資料庫資料恢復方法分享事件資料庫資料恢復
- 資料庫修復資料恢復資料庫資料恢復
- 恢復資料庫資料庫
- 一次特殊的資料庫恢復資料庫
- DB2資料庫的備份測試--開始恢復DB2資料庫
- 【資料庫資料恢復】SqlServer資料庫無法讀取的資料恢復案例資料庫資料恢復SQLServer
- 【資料庫資料恢復】sql server資料庫連線失效的資料恢復案例資料庫資料恢復SQLServer
- 【資料庫資料恢復】MongoDB資料庫檔案損壞的資料恢復案例資料庫資料恢復MongoDB
- oracle9i使用flashback恢復資料(轉)Oracle
- MySQL資料庫的恢復MySql資料庫
- 【strings】spfile誤修改導致資料庫無法啟動的另一種恢復方法資料庫
- 資料庫的一次資料恢復過程資料庫資料恢復
- 【資料庫資料恢復】ASM磁碟組掉線的Oracle資料庫資料恢復案例資料庫資料恢復ASMOracle
- 【資料庫資料恢復】SQL Server資料庫磁碟空間不足的資料恢復案例資料庫資料恢復SQLServer