我的测试环境中,primary和standby在同一台主机上,ORACLE版本10.2.0.1.0
Sid=orcl
Archive log D:\oracle\product\10.2.0\flash_recovery_area\ORCL\ARCHIVELOG
Spfile部分参数:
log_archive_config='dg_config=(orcl,dg)'
log_archive_dest_2='service=dg valid_for=(online_logfiles,primary_role) db_unique_name=dg'
Sid=dg
Archive log D:\oracle\product\10.2.0\oradata\dg\arc
Spfile部分参数:
log_archive_config='dg_config=(orcl,dg)'
下面为了测试,先将primary上的log_archive_dest_2置空,之后做日志切换,把新产生的日志删除(模拟归档丢失),紧接着再把log_archive_dest_2指向standby,再切换日志,这时standby就会出现缺少归档日志的情况。
SQL> alter system set log_archive_dest_2='';
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
删除新产生的两个归档日志文件
SQL> alter system set log_archive_dest_2='service=dg valid_for=(online_logfiles,primary_role) db_unique_name=dg';
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> select sequence#,applied from v$archived_log;
SEQUENCE# APP
---------- ---
17 YES
18 YES
19 YES
20 YES
21 YES
22 YES
25 NO
此时缺少23、24两个归档未传到standby,至此就可以使用RMAN增量备份来前滚丢失的23和24归档日志了。
Standby:
SQL> alter database recover managed standby database cancel;
数据库已更改。
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
1381543
Primary:
RMAN> backup incremental from scn 1381543 database format 'd:\tmp\forstandby_%U' tag 'forstandby';
启动 backup 于 12-9月 -09
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=144 devtype=DISK
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
输入数据文件 fno=00001 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
输入数据文件 fno=00003 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
输入数据文件 fno=00002 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
输入数据文件 fno=00005 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
输入数据文件 fno=00007 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST.DBF
输入数据文件 fno=00006 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\MARY.DBF
输入数据文件 fno=00004 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
通道 ORA_DISK_1: 正在启动段 1 于 12-9月 -09
通道 ORA_DISK_1: 已完成段 1 于 12-9月 -09
段句柄=D:\TMP\FORSTANDBY_3OKP2P2P_1_1 标记=FORSTANDBY 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:36
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括当前控制文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 12-9月 -09
通道 ORA_DISK_1: 已完成段 1 于 12-9月 -09
段句柄=D:\TMP\FORSTANDBY_3PKP2P3T_1_1 标记=FORSTANDBY 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
完成 backup 于 12-9月 -09
将生成的增量备份文件复制到standby(我的环境中这步就省略了,primary和standby在同一主机)
Standby:
RMAN> catalog start with 'd:\tmp\forstandby';
使用目标数据库控制文件替代恢复目录
搜索与样式 d:\tmp\forstandby 匹配的所有文件
数据库未知文件的列表
=====================================
文件名: D:\TMP\FORSTANDBY_3OKP2P2P_1_1
文件名: D:\TMP\FORSTANDBY_3PKP2P3T_1_1
是否确实要将上述文件列入目录 (输入 YES 或 NO)? yes
正在编制文件目录...
目录编制完毕
已列入目录的文件的列表
=======================
文件名: D:\TMP\FORSTANDBY_3OKP2P2P_1_1
文件名: D:\TMP\FORSTANDBY_3PKP2P3T_1_1
RMAN> recover database noredo;
启动 recover 于 12-9月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=31 devtype=DISK
通道 ORA_DISK_1: 正在开始恢复增量数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集恢复的数据文件
数据文件 00001 的恢复目标: D:\ORACLE\PRODUCT\10.2.0\ORADATA\DG\SYSTEM01.DBF
数据文件 00002 的恢复目标: D:\ORACLE\PRODUCT\10.2.0\ORADATA\DG\UNDOTBS01.DBF
数据文件 00003 的恢复目标: D:\ORACLE\PRODUCT\10.2.0\ORADATA\DG\SYSAUX01.DBF
数据文件 00004 的恢复目标: D:\ORACLE\PRODUCT\10.2.0\ORADATA\DG\USERS01.DBF
数据文件 00005 的恢复目标: D:\ORACLE\PRODUCT\10.2.0\ORADATA\DG\EXAMPLE01.DBF
数据文件 00006 的恢复目标: D:\ORACLE\PRODUCT\10.2.0\ORADATA\DG\MARY.DBF
数据文件 00007 的恢复目标: D:\ORACLE\PRODUCT\10.2.0\ORADATA\DG\TEST.DBF
通道 ORA_DISK_1: 正在读取备份段 D:\TMP\FORSTANDBY_3OKP2P2P_1_1
通道 ORA_DISK_1: 已恢复备份段 1
段句柄 = D:\TMP\FORSTANDBY_3OKP2P2P_1_1 标记 = FORSTANDBY
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:07
完成 recover 于 12-9月 -09
Primary:
备份standby controlfile
RMAN> backup current controlfile for standby format 'd:\tmp\standby.bck';
启动 backup 于 12-9月 -09
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
备份集中包括备用控制文件
通道 ORA_DISK_1: 正在启动段 1 于 12-9月 -09
通道 ORA_DISK_1: 已完成段 1 于 12-9月 -09
段句柄=D:\TMP\STANDBY.BCK 标记=TAG20090912T164532 注释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:03
完成 backup 于 12-9月 -09
Standby:
RMAN> restore standby controlfile from 'd:\tmp\standby.bck';
启动 restore 于 12-9月 -09
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=37 devtype=DISK
通道 ORA_DISK_1: 正在复原控制文件
通道 ORA_DISK_1: 恢复完成, 用时: 00:00:02
输出文件名=D:\ORACLE\PRODUCT\10.2.0\ORADATA\DG\STANDBY.CTL
完成 restore 于 12-9月 -09
SQL> shutdown immediate
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 209715200 bytes
Fixed Size 1248116 bytes
Variable Size 67110028 bytes
Database Buffers 134217728 bytes
Redo Buffers 7139328 bytes
SQL> alter database mount standby database;
数据库已更改。
SQL> alter database recover managed standby database disconnect from session;
数据库已更改。
Primary上切换几次归档,再到standby上看应用情况:
SQL> select sequence#,applied from v$archived_log;
SEQUENCE# APP
---------- ---
26 YES
27 YES
此时可看到standby已应用了primary新产生的归档日志26、27,说明已跳过了缺少的23、24两个归档,可继续前滚primary传到standby的归档日志,实现了incremental backup补足缺失归档部分。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17997/viewspace-614510/ ,如需转载,请注明出处,否则将追究法律责任。