1. Oracle 閃回特性(FLASHBACK DATABASE)

來源:互聯網
上載者:User

標籤:name   byte   操作   -o   MF   成功   配置   clu   使用者管理   

轉載自:http://blog.csdn.net/leshami/article/details/6100429

 

閃回技術通常用於快速簡單恢複資料庫中出現的認為誤操作等邏輯錯誤,從閃回的方式可以分為基於資料庫層級閃回、表層級閃回、事務層級閃回,根據閃回對資料的影響程度又可以分為閃回恢複,閃回查詢。閃回恢複將修改資料,閃回點之後的資料將全部丟失。而閃回查詢則可以查詢資料被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 [<database_name>]  TO [BEFORE] SCN <system_change_number>   --基於SCN閃回        FLASHBACK [STANDBY] DATABASE [<database_name>]  TO [BEFORE] TIMESTMP <system_timestamp_value>--基於時間戳記閃回        FLASHBACK [STANDBY] DATABASE [<database_name>]  TO [BEFORE] RESTORE POINT <restore_point_name>--基於時點閃回    如下面的樣本:        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以及基於使用者管理的備份與恢複,其主要原因是因為資料庫閃回使用的是閃回日誌,
而閃回日誌中儲存的是資料區塊的完整鏡像。其次閃回能夠恢複的程度取決於閃回空間的大小以及閃回的保留原則,閃回空間大小會被迴圈使用,而閃回的保留原則則決定了閃回日誌保留的時間長度。總之,合理的平衡恢複速度與可用空間依賴於具體服務需求。

 

1. Oracle 閃回特性(FLASHBACK DATABASE)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.