Oracle 閃回特性(FLASHBACK DATABASE)
--=====================================
-- Oracle 閃回特性(FLASHBACK DATABASE)
--=====================================
閃回技術通常用於快速簡單恢復資料庫中出現的認為誤操作等邏輯錯誤,從閃回的方式可以分為基於資料庫級別閃回、表級別閃回、事務
級別閃回,根據閃回對資料的影響程度又可以分為閃回恢復,閃回查詢。閃回恢復將修改資料,閃回點之後的資料將全部丟失。而閃回查詢則可
以查詢資料被DML的不同版本,也可以在此基礎之上確定是否進行恢復等。本文主要描述flashback database的使用。
一、flashback database特性
flashback data1base閃回到過去的某一時刻
閃回點之後的工作全部丟失
使用resetlogs建立新的場景並開啟資料庫(一旦resetlogs之後,將不能再flashback至resetlogs之前的時間點)
常用的場景:truncate table、多表發生意外錯誤等
使用閃回日誌來實現資料庫閃回,閃回點之後的資料將丟失
二、flashback database的組成
閃回緩衝區:當啟用flashback database,則sga中會開闢一塊新區域作為閃回緩衝區,大小由系統分配
啟用新的rvwr程式:rvwr程式將閃回緩衝區的內容寫入到閃回日誌中,注意閃回日誌不同於聯機重做日誌,閃回日誌在聯機重做日誌基礎之
上生成,是完整資料塊映像的日誌。聯機日誌則是變化的日誌。閃回日誌不能複用,也不能歸檔。閃回日誌使用迴圈寫方式。
三、flashback database的配置
flashback database要求資料庫必須處於歸檔模式,且閃回之後必須使用resetlogs開啟資料庫
a.檢視資料庫的歸檔模式及閃回是否啟用
SQL> select log_mode,open_mode,flashback_on from v$database;
LOG_MODE OPEN_MODE FLASHBACK_ON
------------ ---------- ------------------
ARCHIVELOG READ WRITE NO --FLASHBACK_ON為NO,則表示閃回特性尚未啟用
b.檢視及設定閃回目錄、閃回目錄空間大小等
--下面檢視恢復目錄及恢復目路分配的大小
--可以使用alter system set db_recovery_file_dest 來設定新路徑
--可以使用alter system set db_recovery_file_dest_size來設定新的大小
SQL> show parameter db_recovery
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /u01/app/oracle/flash_recovery
_area
db_recovery_file_dest_size big integer 2G
c.設定閃回保留目標生存期
SQL> show parameter db_flashback --預設為分鐘,即小時
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target integer 1440
SQL> alter system set db_flashback_retention_target=30; --設定保留時間為半小時
d.在mount狀態下來啟用flashback,如在open狀態下則出現下列錯誤提示
SQL> alter database flashback on;
alter database flashback on
*
ERROR at line 1:
ORA-38759: Database must be mounted by only one instance and not open.
--一致性關閉資料庫後,在mount狀態下設定flashback
SQL>startup mount exclusive;
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> alter database flashback on; --開啟閃回資料庫功能
SQL> ho ps -ef | grep rvw --可以看到新增了後臺程式rvwr
oracle 3563 1 0 12:12 ? 00:00:00 ora_rvwr_orcl
--下面檢視閃回區分配的大小為大約M,閃回分鐘以內的資料則需要M左右的空間
--注意列oldest_flashback_time說明了允許返回的最早的時間點
SQL> select oldest_flashback_scn old_flhbck_scn,oldest_flashback_time old_flhbck_tim,
2 retention_target rete_trgt,flashback_size/1024/1024 flhbck_siz,
3 estimated_flashback_size/1024/1024 est_flhbck_size
4 from v$flashback_database_log;
OLD_FLHBCK_SCN OLD_FLHBC RETE_TRGT FLHBCK_SIZ EST_FLHBCK_SIZE
-------------- --------- ---------- ---------- ---------------
915137 24-OCT-10 30 7.8125 11.2519531
SQL> select * from v$flashback_database_stat; --檢視閃回
BEGIN_TIM END_TIME FLASHBACK_DATA DB_DATA REDO_DATA ESTIMATED_FLASHBACK_SIZE
--------- --------- -------------- ---------- ---------- ------------------------
24-OCT-10 24-OCT-10 7905280 86802432 96329728 0
SQL> select * from v$sgastat where name like 'flashback%'; --檢視sga中分配的閃回空間大小
POOL NAME BYTES
------------ -------------------------- ----------
shared pool flashback generation buff 3981204
shared pool flashback_marker_cache_si 9196
SQL> ho ls -hlt $ORACLE_BASE/flash_recovery_area/ORCL/flashback --檢視生成的閃回日誌
total 7.9M
-rw-r----- 1 oracle oinstall 7.9M Oct 24 12:37 o1_mf_6d7dkogw_.flb
四、使用flashback database閃回資料庫
步驟(前提歸檔日誌可用)
關閉資料庫
啟動資料庫到mount狀態(exclusive模式)
閃回至某個時間點,SCN或log sequence number
使用resetlogs開啟資料庫
1.使用sqlplus實現閃回
可以接受一個時間標記或一個系統改變號實參
sqlplus幾種常用的閃回資料庫方法
FLASHBACK [STANDBY] DATABASE [
FLASHBACK [STANDBY] DATABASE [
FLASHBACK [STANDBY] DATABASE [
如下面的示例:
SQL> flashback database to timestamp('2010-10-24 13:04:30','yyyy-mm-dd hh24:mi:ss');
SQL> flashback database to scn 918987;
SQL> flashback database ro restore point b1_load;
a.基於時間戳閃回
SQL> select count(1) from usr1.tb1; --查詢使用者usr1下表tb1中的記錄數
COUNT(1)
----------
404944
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') tm from dual; --獲得系統當前的時間
TM
-------------------
2010-10-24 13:04:30
SQL> drop user usr1 cascade; --刪除帳戶usr1,同時帳戶usr1下的所有物件將被刪除
SQL> conn scott/tiger; --使用scott 帳戶登陸
SQL> create table tb_emp as select * from emp; --新建立表tb_emp
SQL> shutdown immediate; --關係系統
SQL> startup mount ; --重新到mount狀態
SQL> flashback database to timestamp --實施閃回
2 to_timestamp('2010-10-24 13:04:30','yyyy-mm-dd hh24:mi:ss') ;
SQL> alter database open resetlogs;
SQL> select count(1) from usr1.tb1; --帳戶usr1及其物件tb1被成功閃回
COUNT(1)
----------
404944
SQL> select count(1) from scott.tb_emp; --閃回成功後,在閃回點之後修改的資料全部丟失
select count(1) from scott.tb_emp
*
ERROR at line 1:
ORA-00942: table or view does not exist
b.基於SCN號閃回
SQL> select current_scn from v$database; --獲得當前的SCN號
CURRENT_SCN
-----------
918987
SQL> drop table usr1.tb1; --刪除使用者usr1下的表tb1
SQL> alter system checkpoint; --手動執行檢查點
SQL> select file#,checkpoint_change# from v$datafile;
FILE# CHECKPOINT_CHANGE#
---------- ------------------
5 921478
SQL> shutdown abort;
SQL> startup mount;
SQL> flashback database to scn 918987;
SQL> select count(1) from usr1.tb1;
COUNT(1)
----------
404944
c.基於時點閃回
SQL> create table t(id int,col varchar2(20)); --建立表t
SQL> insert into t values(1,'ABC');
SQL> insert into t values(2,'DEF');
SQL> commit;
SQL> create restore point bef_damage; --建立閃回點
SQL> insert into t values(3,'GHI');
SQL> select ora_rowscn,id,col from t; --檢視錶t的記錄
ORA_ROWSCN ID COL
---------- ---------- --------------------
1874406 1 ABC
1874406 2 DEF
1874406 3 GHI
SQL> shutdown immediate;
SQL> startup mount exclusive;
SQL> flashback database to restore point bef_damage; --實施時點閃回
SQL> alter database open resetlogs;
SQL> select * from t; --閃回成功後,閃回點之後的資料丟失
ID COL
---------- --------------------
1 ABC
2 DEF
2.使用RMAN進行flashback database
使用RMAN進行閃回資料庫的幾種常用辦法
RMAN> flashback database to scn=918987;
RMAN> flashback database to sequence=85 thread=1;
SQL> create table scott.tb_emp as select * from scott.emp;
SQL> select count(1) from scott.tb_emp;
COUNT(1)
----------
14
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') tm from dual;
TM
-------------------
2010-10-24 13:59:38
SQL> drop table scott.tb_emp;
SQL> shutdown abort;
SQL> startup mount;
RMAN> flashback database
2> to time="to_date('2010-10-24 13:59:00','yyyy-mm-dd hh24:mi:ss')";
SQL> select count(1) from scott.tb_emp;
COUNT(1)
----------
14
查詢檢視:v$recovery_file_dest將顯示閃回區的使用情況
SQL> select name,space_limit/1024/1024 sp_limt
2 ,space_used/1024/1024 sp_usd,space_reclaimable/1024/1024 sp_recl,
3 number_of_files num_fils from v$recovery_file_dest;
NAME SP_LIMT SP_USD SP_RECL NUM_FILS
--------------------------------------------- ---------- ---------- ---------- ----------
/u01/app/oracle/flash_recovery_area 2048 472.070313 380.671875 18
可以將某些表空間排除在閃回之外
SQL> alter tablespace users flashback off;
SQL> select name,flashback_on from v$tablespace where ts#=4;
NAME FLA
--------------- ---
USERS NO
如果需要對上述表空間啟用閃回功能,則需要在mount模式下對該表空間進行開啟該功能。
五、總結
閃回策略是針對Oracle撤銷功能的增強,為快速恢復資料庫提供了更多的便利。資料庫的閃回恢復的速度要快於RMAN以及基於使用者管理的備份與恢復,其主要原因是因為資料庫閃回使用的是閃回日誌,而閃回日誌中儲存的是資料塊的完整映象。其次閃回能夠恢復的程度取決於閃回空間的大小以及閃回的保留策略,閃回空間大小會被迴圈使用,而閃回的保留策略則決定了閃回日誌保留的時間長度。總之,合理的平衡恢復速度與可用空間依賴於具體服務要求。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22578826/viewspace-703545/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Database 11g閃回技術flashbackOracleDatabase
- oracle 閃回 flashbackOracle
- Flashback Database 閃回資料庫Database資料庫
- oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- [Flashback]Flashback Database閃回資料庫實驗Database資料庫
- ORACLE 閃回檢視v$flashback_database_log/statOracleDatabase
- 【Flashback】Flashback Database閃回資料庫功能實驗Database資料庫
- 【Flashback】啟用Flashback Database閃回資料庫功能Database資料庫
- 【Flashback】Flashback Database閃回資料庫功能實踐Database資料庫
- oracle flashback特性(1.1)--閃回查詢之As of timestampOracle
- oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- [閃回特性之閃回版本查詢]Flashback Version Query
- Oracle Database 10g新特性-閃回表OracleDatabase
- oracle flashback特性(3.2)--Flashback Database操作示例OracleDatabase
- oracle flashback特性(1.5)--閃回查詢之制約因素Oracle
- oracle閃回特性Oracle
- 閃回資料庫(flashback database)知識分享資料庫Database
- 全面學習oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- 【閃回特性之閃回事務查詢】Flashback Transaction Query
- Oracle Database 10g新特性-閃回版本查詢OracleDatabase
- 使用 Oracle Database 10g中的閃回表特性OracleDatabase
- Oracle 12.2新特性: PDB級閃回資料庫(Flashback PDB)Oracle資料庫
- 全面學習oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- 全面學習oracle flashback特性(1.1)--閃回查詢之As of timestampOracle
- 【徵文】全面學習oracle flashback特性(1.2)--閃回查詢之As of scnOracle
- Oracle閃回技術--Flashback Version QueryOracle
- 開啟oracle的flashback閃回功能Oracle
- Flashback_oracle閃回功能的使用Oracle
- 全面學習oracle flashback特性(3.2)--Flashback Database操作示例OracleDatabase
- 啟用Flashback Database閃回資料庫功能(閃回區滿解決辦法 )Database資料庫
- 全面學習oracle flashback特性(1.5)--閃回查詢之制約因素Oracle
- 【徵文】全面學習oracle flashback特性(1.1)--閃回查詢之As of timestampOracle
- 【徵文】全面學習oracle flashback特性(1.4)--閃回查詢之Transaction queryOracle
- 閃回資料庫時間視窗(flashback database window)資料庫Database
- 第5章 閃回資料庫Understanding the Flashback Database資料庫Database
- Flashback閃回技術
- 【徵文】全面學習oracle flashback特性(1.5)--閃回查詢之制約因素Oracle
- Oracle 11g新特性--閃回資料歸檔(flashback data archive)[zt]OracleHive