客户有套DG环境,最近客户的领导提出这样一个需求,要求在一个月内的所有误删除等操作都可以通过备库快速回退到故障点,快速找回数据,通过RMAN备份恢复肯定可以实现,但闪回数据库功能相对来说可能更方便(客户有足够的空间保留一个月的闪回日志)。
以下是针对STANDBY数据库应用FLASHBACK DATABASE功能模拟客户环境做的实验:
操作系统:OEL5.7X86_64
数据库版本:ORACLE 11.2.0.3.0
实验过程:
搭建物理DATA GUARD(略)
备库开启数据库闪回功能
如果备库已经开始应用日志,首先需要关闭MPR进程
SQL> alter database recover managed standby database cancel;
Database altered.
备库打开闪回数据库功能
SQL> alter database flashback on;
Database altered.
将备库打开到OPEN READ ONLY状态
SQL> alter database open read only;
Database altered.
备库启动MPR进程,开始应用日志
SQL> alter database recover managed standby database disconnect from session;
Database altered.
主库模拟数据变化
本实验在主库创建个JOB,每5秒钟更新一次数据。
SQL> conn scott/tiger
Connected.
SQL> declare
2 job_sal number;
3 begin
4 dbms_job.submit(job_sal,
5 'UPDATE EMP_OGG SET SAL=SAL+1;commit;',
6 sysdate,
7 'sysdate+1/24/60/12');
8 commit;
9 end;
10 /
PL/SQL procedure successfully completed.
主库查询当前SCN及数据的值
当JOB运行一段时间后,查询当前数据库SCN及数据的值
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
505250
SQL> select max(sal) from scott.emp_ogg as of scn 505250;
MAX(SAL)
----------
6068
主库切换日志
主库切换日志,保证备库数据尽量和主库完全同步
SQL> alter system switch logfile;
System altered.
SQL> /
System altered.
... ...
... ...
System altered.
SQL> /
System altered.
备库查询数据值
SQL> select max(sal) from scott.emp_ogg;
MAX(SAL)
----------
6097
查询SCN为505250时数据的值
SQL> select max(sal) from scott.emp_ogg as of scn 505250;
MAX(SAL)
----------
6068
备库关闭MPR进程
SQL> alter database recover managed standby database cancel;
Database altered.
备库打开到MOUNT状态
SHUTDOWN IMMEDIATE
STARTUP MOUNT
10.备库闪回到SCN 505250
SQL> flashback database to scn 505250;
Flashback complete.
11.将备库调整到OPEN READ ONLY状态,并查询数据
SQL> alter database open read only;
Database altered.
SQL> select max(sal) from scott.emp_ogg;
MAX(SAL)
----------
6068
12.回退
如果此时可以查询到误删除的数据,那么直接导出数据并在主库还原,还原后可以再次打开MPR进程,MPR进程会自动和主库同步数据,而不需要重新搭建备库。
备库:
SQL> alter database recover managed standby database disconnect from session;
Database altered.
SQL> select max(sal) from scott.emp_ogg;
MAX(SAL)
----------
6223
SQL> a as of scn 505250
1* select max(sal) from scott.emp_ogg as of scn 505250
SQL> /
MAX(SAL)
----------
6068
总结
经过测试,证实备库在应用归档日志的同时,也是会记录闪回日志的。