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.