利用閃回拯救我們的資料(五)
Oracle資料庫的閃回技術Flashback是作為傳統備份還原的一種補充被退出。在傳統的資料庫領域,一旦發生資料損壞,無論是使用者操作失誤,還是系統軟硬體故障,啟用之前進行的備份進行還原動作,是通常的做法。依據不同的備份策略,還原後的資料有是否丟失、丟失多少的問題。
Flashback的特點是恢復速度快、影響面小,對資源消耗情況比傳統的備份還原手段要低得多。如果發生單獨資料表資料丟失、事務操作失誤的情況,單獨使用flashback query和transaction就可以快速進行恢復,而且不會影響其他人使用資料庫。而且,Flashback將恢復的粒度從傳統備份中的“資料庫全庫-表空間-檔案-資料塊”的層面,擴充到“schema-資料表-資料行-事務”的細粒度。
從技術本身看,Flashback並不是一套全新的技術體系,不同的Flashback特性依據的是不同的技術基礎。比如,flashback query等就是依賴Undo前映象檢索到特定時間資料。Flashback Drop則是利用segment recyclebin的特性進行轉儲行為。而Flashback Database則是利用flashback log進行的資料還原。
本篇主要介紹Flashback Database的配置使用。在目前的各種Flashback中,Flashback Database是和其他技術相容應用比較廣泛的一種。在很多場合下,它是可以實現定點資料恢復的。
1、環境介紹
筆者使用資料庫版本為11gR2,具體版本為11.2.0.4。
SQL> select * from v$version;
BANNER
--------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 – Production
當前資料庫處在歸檔模式下,Recovery Area啟用。
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 33
Next log sequence to archive 35
Current log sequence 35
Recovery Area留足足夠空間。
SQL> show parameter recovery;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /u01/app/fast_recovery_area
db_recovery_file_dest_size big integer 10000M
recovery_parallelism integer 0
2、Flashback Database配置
預設情況下,flashback database是沒有啟動的。需要一次完全關閉資料庫,並且切換到mount狀態下。
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 372449280 bytes
Fixed Size 1364732 bytes
Variable Size 318770436 bytes
Database Buffers 46137344 bytes
Redo Buffers 6176768 bytes
Database mounted.
啟動flashback模式。
SQL> alter database flashback on;
Database altered.
SQL> alter database open;
Database altered.
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
檢視v$database中的flashback_on欄位,可以標識是否開啟閃回資料庫功能。另一個標誌就是後臺進行RVWR,一旦開啟閃回功能,後臺會自動啟動進行進行Flashback Log管理收集。
[oracle@SimpleLinux ~]$ ps -ef | grep rvwr
oracle 5725 1 0 13:28 ? 00:00:00 ora_rvwr_ora11g
oracle 5776 1589 1 13:31 pts/0 00:00:00 grep rvwr
3、Flashback狀態觀察
flashback database是基於資料庫對於flashback log的收集進行的。預設情況下,flashback log是儲存在recovery area中的。
SQL> select * from v$flash_recovery_area_usage;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------- ------------------ ------------------------- ---------------
CONTROL FILE 0.09 0 1
REDO LOG 1.5 0 3
ARCHIVED LOG 0 0 1
BACKUP PIECE 10.86 0 4
IMAGE COPY 0 0 0
FLASHBACK LOG 1 0 2
FOREIGN ARCHIVED LOG 0 0 0
和常見的歸檔模式備份還原策略不同,flashback database是針對短時間恢復技術而言的。資料庫中存在引數,用於設定恢復時間段。
SQL> show parameter flashback;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target integer 1440
注意:這個引數預設為1440,單位是分鐘。也就是說,開啟flashback database的情況下,要求保留1440分鐘,也就是24小時的備份。檢視v$flashback_database_log中,可以檢視到能夠恢復到的最早時間。
SQL> select OLDEST_FLASHBACK_SCN, to_char(OLDEST_FLASHBACK_TIME,'yyyy-mm-dd hh24:mi:ss') oldest_time, FLASHBACK_SIZE from v$flashback_database_log;
OLDEST_FLASHBACK_SCN OLDEST_TIME FLASHBACK_SIZE
-------------------- ------------------- --------------
1093695 2014-04-28 13:28:43 104857600
當前時間:
SQL> select dbms_flashback.get_system_change_number, to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
GET_SYSTEM_CHANGE_NUMBER TO_CHAR(SYSDATE,'YYYY-MM-DDHH2
------------------------ ------------------------------
1140051 2014-04-28 14:22:57
檢視flashback log日誌檔案情況:
SQL> select * from v$flashback_database_logfile;
NAME LOG# THREAD# SEQUENCE# BYTES FIRST_CHANGE# FIRST_TIME TYPE
-------------------------------------------------------------------------------- ---------- ---------- ---------- ---------- ------------- ----------- ---------
/u01/app/fast_recovery_area/ORA11G/flashback/o1_mf_9ovsr9ty_.flb 1 1 1 52428800 1093747 28-四月-14 NORMAL
/u01/app/fast_recovery_area/ORA11G/flashback/o1_mf_9ovsrd5y_.flb 2 1 1 52428800 0 RESERVED
這裡需要討論兩個問題,一個是對於引數db_flashback_retention_target的理解,另一個是對於flashback log大小的估算。
db_flashback_retention_target設定的是一個儲存日誌的最大時間段。應該說,它是一種“理想值”,和undo_retention相同。我們雖然設定了時間值,但是不同的資料庫負載,redo log生成數量不同,對於flashback log保留需要的資源量就不同。設想一種情況,如果由於儲存原因,Oracle不能保留引數時間段對應的所有日誌,flashback database也是不能恢復到指定時間點的。所以,引數db_flashback_retention_target只是一個期望值,真正能否恢復到什麼時間點,還需要檢視檢視v$flashback_database_log的最早恢復時間。
另一個是log大小的估算。單從recovery area的職責看,archive log、backup set和flashback log是三個比較消耗空間的專案。如果開啟了flashback database功能,一定需要分配額外的儲存給recovery area。大小估算要和每分鐘生成redo log size相關,Oracle的經驗公式是參考業務峰值的redo log size和保留時間進行估算。峰值redo size可以從Oracle AWR報告中找到。
4、恢復實驗
下面進行flashback實驗。當前存在schema名稱為test,其中包括6個物件。
SQL> select count(*) from dba_objects where owner='TEST';
COUNT(*)
----------
6
模擬誤刪除test使用者。
SQL> select dbms_flashback.get_system_change_number, to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
GET_SYSTEM_CHANGE_NUMBER TO_CHAR(SYSDATE,'YYYY-MM-DDHH2
------------------------ ------------------------------
1140051 2014-04-28 14:24:43
SQL> drop user test cascade;
User dropped
SQL> select count(*) from dba_objects where owner='TEST';
COUNT(*)
----------
0
啟動到mount狀態。
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 372449280 bytes
Fixed Size 1364732 bytes
Variable Size 301993220 bytes
Database Buffers 62914560 bytes
Redo Buffers 6176768 bytes
Database mounted.
執行恢復操作。
SQL> select OLDEST_FLASHBACK_SCN, to_char(OLDEST_FLASHBACK_TIME,'yyyy-mm-dd hh24:mi:ss') oldest_time, FLASHBACK_SIZE from v$flashback_database_log;
OLDEST_FLASHBACK_SCN OLDEST_TIME FLASHBACK_SIZE
-------------------- ------------------- --------------
1093695 2014-04-28 13:28:43 104857600
SQL> flashback database to scn 1140051;
Flashback complete.
flashback的方式支援三種,scn、timestamp和log sequence。其中SCN和timestamp比較方便。
執行成功後,open resetlogs啟動資料庫。
--Open Reset
SQL> alter database open resetlogs;
Database altered.
啟動資料庫後,test資料恢復。
SQL> select group#, sequence#, status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 1 CURRENT
2 0 UNUSED
3 0 UNUSED
SQL> select count(*) from dba_objects where owner='TEST';
COUNT(*)
----------
6
實驗成功。
5、結論
flashback database是一種很方便的資料恢復技術,可以快速的進行資料恢復動作。相對於傳統的備份還原,具有很大優勢。使用過程中,應該注意:啟用flashback會帶來一定程度的效能損耗,在生產環境下使用應該進行仔細評估。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-1154074/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用閃回拯救我們的資料(三)
- 利用閃回拯救我們的資料(四)
- 使用閃回挽救我們的資料
- 使用閃回拯救我們的資料(二)
- 利用flashback閃回表和資料
- 【備份恢復】閃回資料庫(五)RMAN 命令列閃回資料庫資料庫命令列
- Orcale利用閃回功能恢復資料
- 閃回(關於閃回資料庫)資料庫
- 資料庫的閃回資料庫
- 利用binlog2sql閃回丟失資料SQL
- 利用可靠還原點進行資料庫閃回資料庫
- 閃回資料庫資料庫
- 【備份恢復】閃回資料庫(一)閃回資料庫的管理資料庫
- Oracle閃回技術之閃回資料庫Oracle資料庫
- 閃回資料庫的事情資料庫
- Oracle資料庫閃回Oracle資料庫
- flashback query閃回資料
- Oracle閃回資料庫Oracle資料庫
- Oracle閃回技術 為Oracle閃回配置資料庫Oracle資料庫
- Oracle 閃回技術 概覽 資料庫閃回功能Oracle資料庫
- (f)--閃回恢復區---實踐2---閃回表(閃回DML部分資料會用到閃回查詢)
- 【備份恢復】閃回資料庫(二) 基於 SCN 閃回資料庫資料庫
- FlashBack總結之閃回資料庫與閃回刪除資料庫
- Flashback Database 閃回資料庫Database資料庫
- Oracle閃回資料歸檔Oracle
- 監視閃回資料庫資料庫
- 實驗-閃回資料庫資料庫
- 【DG】利用閃回資料庫(flashback)修復Failover後的DG環境資料庫AI
- 資料庫基於版本的閃回資料庫
- 開啟資料庫的閃回功能:資料庫
- oralce恢復誤刪除的表中的資料(閃回、閃回查詢)
- 清除閃回資料歸檔區資料
- 【備份恢復】閃回資料庫(三)基於時間戳閃回資料庫資料庫時間戳
- Backup And Recovery User's Guide-使用閃回資料庫-開啟閃回資料庫GUIIDE資料庫
- Oracle 閃回資料庫測試Oracle資料庫
- 詳解oracle資料庫閃回Oracle資料庫
- 基於SCN閃回資料庫資料庫
- 閃回技術查詢資料