备库检查是否有日志缺失:
select * from v$archive_gap;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
1 99 109
从上面的信息可以看出,备库中缺失了99到109的日志。
select name from v$archived_log where thread#=1 and dest_id=1 and sequence# between 99 and 109;
把日志拷贝到备库上,4、在备库上手工注册上一步中从主库拷贝来的日志
alter database register logfile '/u01/archivelog/1_99_626106231.arc';
稍等片刻,观察备库的alert日志信息 :
Sun Aug 12 20:38:47 2007
Media Recovery Log /u01/archivelog/1_99_626106231.arc
Media Recovery Log /u01/archivelog/1_100_626106231.arc
Media Recovery Log /u01/archivelog/1_101_626106231.arc
Media Recovery Log /u01/archivelog/1_102_626106231.arc
从以上信息,可以看出之前注册的日志已经被正常应用。或者查询视图v$archived_log的applied字段
检查备库是否还有日志GAP
SQL> select * from V$ARCHIVE_GAP;
gap较多,主库增量备份到备库进行恢复
备库操作:查看gap、scn等
1、备库确认丢失归档信息
SQL>select * from v$archive_gap;
2、备库确认最小scn号
在备库上执行:
1)停止日志应用服务
SQL>alter database recover managed standby database cancel;
2)查看备库当前的scn
SQL>select current_scn from v$DATABASE;
CURRENT_SCN
39597750709
3)查看文件头部的最小scn
SQL>select min(f.checkpoint_change#) from v$datafile_header f,v$datafile d where f.file#=d.fileand d.enabled !='READ ONLY';
CURRENT_SCN
39597657793
以上分别查出了备库当前的scn和文件头部的最小scn,采用两者最小的scn在主库进行增量备份
4.2.主库确认增量备份
SQL>select file#,to_char(creation_time,'yyyy-mm-dd hh24:mi:ss' ) creation_time,status,last_time,name from v$datafile where creation_change#>39597657793;
4.3.主库进行增量备份、创建备库控制文件
1、主库执行增量备份
RMAN>backup as compressed backupset incremental from scn 1276181632 database format'/backupdata/incr_bak_full_%U.bak'
2、主库备份控制文件
SQL>alter database create standby controlfile as '/backupdata/ctl20190829_bak.ctl';
3、主库拷贝备份到备库
[oracle@rac2 backupdata]$ scp ctl20190829_bak.ctl oracle@172.16.10.115:/archdata
[oracle@rac2 backupdata]$ scp incr_bak_full_0iuae673_1_1.bak oracle@172.16.10.115:/archdata
4.4.备库恢复
1、备份备库的控制文件
SQL>startup mount --备库首先启动至mount状态
RMAN>backup current controlfile format '/archdata/ncdg_bak_20190829.ctl'; --备份当前备库的控制文件
2、备库启到nomount状态,恢复主库备份过来的新的控制文件
SQL>startup nomount --启动数据库到nomount状态
RMAN>restore controlfile from '/archdata/ctl20190829_bak.ctl';
3、备库mount,将主库备份的增量备份文件,注册到catalog库
SQL>alter database mount
RMAN>catalog start with '/archdata/incr_bak_full_0iuae673_1_1.bak';
3、备库恢复
RMAN>recover database noredo;
4.5.验证结果
1、备库: 执行接收并恢复日志操作
1)恢复日志应用
SQL> alterdatabase recover managed standby database disconnect from session;
2)检查是否还有gap
SQL> select * fromv$archive_gap;
3)检查最大的日志
SQL> select THREAD#,max(SEQUENCE#) from v$archived_log group by THREAD#;
THREADMAX(SEQUENCE#)
1 3729
2、主库:验证结果
1)检查最大日志
SQL> select THREAD,max(SEQUENCE#) from v$archived_log group by THREAD#;
THREADMAX(SEQUENCE#)
1 3729
2)Primary进行日志切换,查看standby告警日志。
SQL>alter system switch logfile;
SQL>alter system checkpoint;
gap较多,主库duplicate全库备份恢复到备库
5.5.1.备库操作:查看gap、scn等
1、备库确认丢失归档信息
SQL>select * from v$archive_gap;
2、备库停止日志应用服务
SQL>alter database recover managed standby database cancel;
5.2.主库进行duplicate在线全备并恢复到备库
主库oracle用户执行
rman target sys/oracle@ncdb1 auxiliary sys/oracle@ncdg
RMAN>duplicate target database for standby from active database;
5.3.备库验证恢复完成
备份备库的控制文件
SQL>select open_mode,PROTECTION_LEVEL,DATABASE_ROLE,SWITCHOVER_STATUS from v$database;
5.4.验证结果
1、备库: 执行接收并恢复日志操作
1)恢复日志应用
SQL> alterdatabase recover managed standby database disconnect from session;
2)检查是否还有gap
SQL> select * fromv$archive_gap;
3)检查最大的日志
SQL> select THREAD#,max(SEQUENCE#) from v$archived_log group by THREAD#;
THREADMAX(SEQUENCE#)
1 3729
2、主库:验证结果
1)检查最大日志
SQL> select THREAD,max(SEQUENCE#) from v$archived_log group by THREAD#;
THREADMAX(SEQUENCE#)
1 3729
2)Primary进行日志切换,查看standby告警日志。
SQL>alter system switch logfile;
SQL>alter system checkpoint;