Flashback Database闪回数据库:与RMAN的不完全恢复非常类似,它可以把整个数据库回退到过去的某个时点的状态,这个功能依赖于Flashback log日志。比RMAN更快速和高效,因此Flashback Database 可以看作是不完全恢复的替代技术。闪回数据库的前提是要开启归档日志。
闪回原理:在启用闪回数据时,会将修改过的块的前映像作为闪回数据库日志保存在闪回恢复区中,如出现逻辑坏块或用户错误操作需要恢复到过去的时间点,闪回数据库将还原数据库的前映像,然后使用归档日志和redo前滚到期望恢复的时间点,因为无需还原数据库的数据文件,所有此过程速度比较传统的还原恢复通常快很多。
闪回限制:
① Flashback Database 不能解决Media Failure, 这种错误RMAN恢复仍是唯一选择;
② 如果删除了数据文件或者利用Shrink技术缩小数据文件大小,这时不能用Flashback Database技术回退到改变之前的状态,这时候就必须先利用RMAN把删除之前或者缩小之前的文件备份restore出来,然后利用Flashback Database执行剩下的Flashback Database;
③ 如果控制文件是从备份中恢复出来的,或者是重建的控制文件,也不能使用Flashback Database。
④ 使用Flashback Database能恢复到的最早的SCN,取决与Flashback Log中记录的最早SCN。
配置闪回参数:
闪回数据库相关参数:
① db_recovery_file_dest #决定闪回恢复区路径
② db_recovery_file_dest_size #决定闪回恢复区大小
③ db_flashback_retention_target #保留恢复最近多长时间的数据,单位为分钟。
闪回相关视图:
① V$restore_point
#闪回点
② V$FLASHBACK_DATABASE_LOG #闪回日终信息
③ V$FLASHBACK_DATABASE_STAT
④ v$flash_recovery_area_usage; #闪回区使用率
1.1. 数据库闪回基本步骤
前提:闪回归档日志可用
1) 关闭数据库
2) 启动数据库到 mount 状态(exclusive 模式)
3) 闪回至某个时间点, SCN 或还原点
4) Read only 打开数据库,验证是否已还原到理想的时间点
5) 使用 resetlogs 打开数据库
1.2. 常用闪回数据库方法
1) 基于 SCN 闪回
FLASHBACK [STANDBY] DATABASE
[
[BEFORE] SCN
2) 基于时间戳闪回
FLASHBACK [STANDBY] DATABASE
[
[BEFORE] TIMESTMP
3) 基于可靠还原点闪回
FLASHBACK [STANDBY] DATABASE
[
[BEFORE] RESTORE POINT
4) RMAN 命令行执行闪回数据库
1.3. 开启数据库闪回功能
1) 验证数据库是否开启闪回, NO 表示未开启(默认)
SYS@ORA11GR2>select flashback_on from v$database;
FLASHBACK_ON
------------------
NO
2) 闪回日志保留期限(默认保留 1 天,本测试改为保留 2 天)
SYS@ORA11GR2>show parameter flashback
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target integer 1440
SYS@ORA11GR2>alter system set db_flashback_retention_target=2880;
System altered.
SYS@ORA11GR2>show parameter flashback
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target integer 2880
3) 启用闪回数据库功能:
启用闪回数据库需使用闪回日志,而闪回日志在闪回归档里;闪回归档又必须要启用快速恢复区(因为闪回归档在快速恢复区里),同时又得启用归档进程!!!!!
——前提:
查询:
SYS@ORA11GR2>show parameter recover
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string
db_recovery_file_dest_size big intege r 0
db_unrecoverable_scn_tracking boolean TRUE
recovery_parallelism integer 0
SYS@ORA11GR2>archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/arch2
Oldest online log sequence 49
Next log sequence to archive 51
Current log sequence 51
SYS@ORA11GR2>alter system set db_recovery_file_dest_size=3G;
System altered.
SYS@ORA11GR2>alter system set db_recovery_file_dest='/u01/app/FRA';
System altered.
验证:
SYS@ORA11GR2>show parameter recover
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /u01/app/FRA
db_recovery_file_dest_size big integer 3G
db_unrecoverable_scn_tracking boolean TRUE
recovery_parallelism integer 0
SYS@ORA11GR2>archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u01/app/arch2
Oldest online log sequence 49
Next log sequence to archive 51
Current log sequence 51
SYS@ORA11GR2>
再修改:
SYS@ORA11GR2>show parameter log_archive
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_config string
log_archive_dest string
log_archive_dest_1 string location=/u01/app/arch1
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_18 string
log_archive_dest_19 string
log_archive_dest_2 string location=/u01/app/arch2
log_archive_dest_20 string
log_archive_dest_21 string
解决:
SYS@ORA11GR2>alter system set log_archive_dest_2='';
System altered.
SYS@ORA11GR2>alter system set log_archive_dest_1='';
System altered.
SYS@ORA11GR2>alter system set db_recovery_file_dest='';
System altered.
SYS@ORA11GR2>alter system set db_recovery_file_dest='/u01/app/FRA';
System altered.
验证:
SYS@ORA11GR2>archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 55
Next log sequence to archive 57
Current log sequence 57
——启动闪回数据库:
SYS@ORA11GR2>shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@ORA11GR2>
SYS@ORA11GR2>startup mount;
ORACLE instance started.
Total System Global Area 730714112 bytes
Fixed Size 2256832 bytes
Variable Size 452984896 bytes
Database Buffers 272629760 bytes
Redo Buffers 2842624 bytes
Database mounted.
SYS@ORA11GR2>
SYS@ORA11GR2>alter database flashback on;
(要将闪回归档信息入控制文件中,在应用日志之前)
Database altered.
验证:
SYS@ORA11GR2>select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
SYS@ORA11GR2>alter database open;
Database altered.
SYS@ORA11GR2>!ps -ef|grep rvw
oracle 3688 1 0 06:43 ? 00:00:00 ora_rvwr_ORA11GR2
oracle 4003 3312 0 06:44 pts/1 00:00:00 /bin/bash -c ps -ef|grep rvw
oracle 4005 4003 0 06:44 pts/1 00:00:00 grep rvw
RVWR:恢复写入器(Recovery Writer) 负责维护闪回恢复区中块的前映像,要与FLASHBACK DATABASE命令一起使用.
1.4. 监视闪回数据库
1.4.1. 查看快速恢复区磁盘配额
SYS@ORA11GR2>select estimated_flashback_size,flashback_size from v$flashback_database_log;
ESTIMATED_FLASHBACK_SIZE FLASHBACK_SIZE
------------------------ --------------
131973120 209715200
1)
ESTIMATED_FLASHBACK_SIZE 使用先前记录的闪回数据,来估计要满足当前闪回保留目标时闪回
日志在快速恢复区中所需的磁盘空间。该估计基于以下两段时间中较短时间段内的工作量:自实例启
动以来的时间段或等于闪回保留目标的最近时间间隔。
2)
FLASHBACK_SIZE 提供当前闪回数据的大小,以字节表示。
1.4.2. 确定当前闪回窗口
SYS@ORA11GR2>select oldest_flashback_scn,oldest_flashback_time from v$flashback_database_log;
OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
1816541 2016-09-30 13:48:58
3) OLDEST_FLASHBACK_SCN 显示可以将数据库闪回到的最小 SCN
4) OLDEST_FLASHBACK_TIME 显示可以将数据库闪回到的最小时间的近似值。
1.4.3. 监视闪回数据库日志中的事件记录
SYS@ORA11GR2>select * from v$flashback_database_stat;
BEGIN_TIME END_TIME FLASHBACK_DATA DB_DATA REDO_DATA ESTIMATED_FLASHBACK_SIZE
------------------- ------------------- -------------- ---------- ---------- ------------------------------------------------------------------------------------------------
2016-10-01 07:03:54 2016-10-01 07:09:06 4546560 6406144 267264 0
使用 V$FLASHBACK_DATABASE_STAT 视图监视闪回数据库日志中记录闪回数据的开销。此视图包含
24 小时的信息,每一行代表一个小时的时间间隔。可以使用此视图确定闪回数据生成过程中的比率变化
1) BEGIN_TIME 开始时间间隔
2) END_TIME 结束时间间隔
3) FLASHBACK_DATA 时间间隔内写入的闪回数据字节数
4) DB_DATA 提供读取和写入的数据块字节数。此视图还包含该间隔所需的估计闪回空间。
5) REDO_DATA 时间间隔内写入的闪回重做数据字节数
6) ESTIMATED_FLASHBACK_SIZE 该间隔所需的估计闪回空间