1.設置恢復目錄
首先數據庫必須是歸檔模式.直接在CDB級別設置flashback on,但是必須先打開閃回恢復區,否則報錯:
SQL> alter database flashback on;alter database flashback on*ERROR at line 1:ORA-38706: Cannot turn on FLASHBACK DATABASE logging.ORA-38709: Recovery Area is not enabled.
配置恢復目錄:
SQL> alter system set db_recovery_file_dest_size=5g scope=both;System altered.SQL> alter system set db_recovery_file_dest='/u01/recoverarea' scope=both;System altered.SQL> show parameter db_recoverNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest string /u01/recoverareadb_recovery_file_dest_size big integer 5G
2.打開數據庫閃回
SQL> alter database flashback on;Database altered.
3.配置閃回日誌保留時間
查看當前的閃回保留時間
SQL> show parameter flashbackNAME TYPE VALUE------------------------------------ ----------- ------------------------------db_flashback_retention_target integer 1440
這裏的1440即1440分鐘24小時.主要這只是一個目標值.因此基於存儲空間上的壓力.數據庫會有限產生歸檔日誌,而非保證閃回日誌的保留時間.
因此如果你需要保證閃回區的空間正常.
查看當前閃回區的使用空間大小:
SQL> select file_type,percent_space_used,number_of_files from v$recovery_area_usage;FILE_TYPE PERCENT_SPACE_USED NUMBER_OF_FILES----------------------- ------------------ ---------------CONTROL FILE 0 0REDO LOG 0 0ARCHIVED LOG 0 0BACKUP PIECE 0 0IMAGE COPY 0 0FLASHBACK LOG 7.81 2FOREIGN ARCHIVED LOG 0 0AUXILIARY DATAFILE COPY 0 0
一旦設置完成了閃回,數據庫就可以閃回到過去的任意時間點,只要保證該時間點在閃回日誌保留時間內.
可以通過查詢v$flashback_database_log查看可以恢復的最早的時間點和scn
1* select * from v$flashback_database_logSQL> /OLDEST_FLASHBACK_SCN OLDEST_FL RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE CON_ID-------------------- --------- ---------------- -------------- ------------------------ ----------4186252 30-SEP-19 1440 419430400 70778880 0
還可以查看閃回日誌的信息:
SQL> select * from v$flashback_database_logfile;NAME LOG# THREAD# SEQUENCE# BYTES FIRST_CHANGE# FIRST_TIM TYPE CON_ID------------------------------------------------------------ ---------- ---------- ---------- ---------- ------------- --------- --------- ----------/u01/recoverarea/ORA19C/flashback/o1_mf_gs40y33h_.flb 1 1 1 209715200 4186252 30-SEP-19 NORMAL 0/u01/recoverarea/ORA19C/flashback/o1_mf_gs40y68t_.flb 2 1 1 209715200 0 RESERVED 0
除了閃回到某個時間點,還有就是創建還原點
4.創建還原點
例如,我們想對數據庫版本進行升級,那麼可以在升級之前創建一個還原點.如果在升級過程中有什麼問題,可以進行數據庫閃回:
SQL> create restore point before_update guarantee flashback database;Restore point created.
查看還原點的信息,同意通過查詢v$restore_point,還可以通過rman來進行查詢:
RMAN> list restore point all;using target database control file instead of recovery catalogSCN RSP Time Type Time Name---------------- -------------------- ---------- -------------------- ----4187203 GUARANTEED 30-SEP-2019 21:51:19 BEFORE_UPDATE
5.閃回數據庫
閃回數據庫需要將數據庫啓動到mount狀態
SQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL> startup mount;ORACLE instance started.Total System Global Area 952106368 bytesFixed Size 9141632 bytesVariable Size 570425344 bytesDatabase Buffers 364904448 bytesRedo Buffers 7634944 bytesDatabase mounted.SQL> flashback database to restore point before_update;Flashback complete.
閃回完成之後記得將此還原點進行刪除:
drop restore point before_update;按照時間點或者scn進行閃回:
flashback database to time = to_date('2012-05-02 10:00:00','yyyy-mm-dd hh:mi:ss');flashback database to scn=XXXX;
6.PDB級別閃回
上面的閃回都是基於CDB的.其實閃回步驟和以前的一模一樣.除了可以對CDB進行閃回,還可以對PDB進行閃回.基本步驟和CBD的閃回一致,只是在創建還原點的時候是在PDB級別創建.
SQL> show pdbsCON_ID CON_NAME OPEN MODE RESTRICTED---------- ------------------------------ ---------- ----------3 BRENT READ WRITE NO
創建PDB級別的還原點:
SQL> create restore point test_pdb guarantee flashback database;Restore point created.
關閉PDB:
SQL> alter pluggable database brent close;Pluggable database altered.
PDB閃回:
SQL> flashback pluggable database to restore point test_pdb;Flashback complete.
打開PDB:
SQL> alter pluggable database brent open resetlogs;Pluggable database altered.