第一部分  问题描述和环境状态确认

----1. 问题场景

Oracle DataGuard主库丢失archivelog,如何不重建备库完成同步?

在Oracle DataGuard主从同步过程中可能出现主库archivelog丢失,备库出现gap错误。
此时,除了重新完整搭建DataGuard之外,可以通过主库增量备份完成备份重新同步。

----2. 解决方式
【主要步骤】
1.在备库上找出当前scn;
2.根据此scn,在主库上使用rman完成增量备份;
3.传输增量备份到备库,同时在备库上恢复;
4.重新启动备库同步。

----3. 增量恢复详细过程

==查看主库信息==
SQL> select database_role from v$database;

DATABASE_ROLE
----------------
PRIMARY

SQL> archive log list;

==查看备库信息==
SQL> select database_role from v$database;

DATABASE_ROLE
----------------
PHYSICAL STANDBY

--3.1.主、备库上查看日志信息
SQL> select group#,thread#,sequence#,bytes,members,archived,status,first_change#,first_time from v$log;

---- #在主库上  查看 LOG GAP 状态
SQL>select dest_name,destination, database_mode, recovery_mode,gap_status from  v$archive_dest_status where dest_id=2;

---- #在备库上查询
SELECT * FROM V$ARCHIVE_GAP;

====3.2 验证主库到备库的归档日志传输情况和备库上归档日志的APPLY情况

====3.2.1 在备库上查看归档日志应用情况:  val.applied='YES' --已应用; val.applied='NO' --待应用;
PhyStdby:SQL>select thread#, sequence#, val.applied
from v$archived_log val, v$database vdb
where val.resetlogs_change# = vdb.resetlogs_change#;

PhyStdby:SQL>select max(lh.SEQUENCE#) "Last applied arc",max(al.SEQUENCE#) "Last recieved arc"
from v$log_history lh,v$archived_log al;

------ 验证最大日志序列号
Primary: SQL> select thread#, max(sequence#) "Last Primary Seq Generated"
from v$archived_log val, v$database vdb
where val.resetlogs_change# = vdb.resetlogs_change#
group by thread# order by 1;

PhyStdby:SQL> select thread#, max(sequence#) "Last Standby Seq Received"
from v$archived_log val, v$database vdb
where val.resetlogs_change# = vdb.resetlogs_change#
group by thread# order by 1;

------ "Last Standby Seq Applied"
PhyStdby:SQL>select thread#, max(sequence#) "Last Standby Seq Applied"
from v$archived_log val, v$database vdb
where val.resetlogs_change# = vdb.resetlogs_change#
and val.applied='YES'
group by thread# order by 1;

----================================================================
====第二部分  利用rman进行增量scn的恢复

==利用rman进行增量scn的恢复==
1.在备库上取消日志应用
SQL> alter database recover managed standby database cancel;

2.查看备库scn
SQL> select current_scn from v$database;
---- select to_char(current_scn) from v$database;
     CURRENT_SCN
 ---------------
  13402877625847

3.根据scn,在主库上进行rman增量备份
Primary: rman>  rman target /

RMAN> backup incremental from scn 13402877625847 database format 'E:\ForStandby_%U.bka' tag 'forstandby';
------backup as compressed backupset incremental from scn 13402877625847 database format 'E:\ForStandby_%U.bka' tag 'forstandby';
RMAN> backup current controlfile for standby format 'E:\ForStandbyCTRL.bkc';

4.查看增量备份信息

E:\temp> dir

5.copy增量备份到备库主机 一目录,如:  E:\temp

6.将备库启动到mount状态
SQL> select open_mode from v$database;

OPEN_MODE
--------------------
READ ONLY

SQL> shutdown immediate;
SQL> startup nomount;
SQL> alter database mount standby database;
SQL> exit

7.rman恢复增量备份和控制文件备份

rman target / nocatalog

RMAN> crosscheck archivelog all;
RMAN> delete expired archivelog all;
RMAN> DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-15';

RMAN> catalog start with 'E:\temp';  ####注册增量备份文件

Do you really want to catalog the above files (enter YES or NO)? yes

RMAN> RECOVER DATABASE NOREDO;  #### 注意 NOREDO 选项

SQL> shutdown;

SQL> startup nomount;

RMAN> restore standby controlfile from 'E:\temp\ForStandbyCTRL.bkc';

RMAN> shutdown;

RMAN> exit

8.启动备库到mount状态
SQL> startup nomount;
SQL> alter database mount standby database;

9.由于恢复了控制文件,因此需要重新添加新的standby redo log file(若先前有,可忽略此步)
alter database add standby logfile group 11 ('D:\APP\ADMINISTRATOR\WHBIDB_REDO\STANDBY11.LOG') size 1024m;
alter database add standby logfile group 12 ('D:\APP\ADMINISTRATOR\WHBIDB_REDO\STANDBY12.LOG') size 1024m;
alter database add standby logfile group 13 ('D:\APP\ADMINISTRATOR\WHBIDB_REDO\STANDBY13.LOG') size 1024m;
alter database add standby logfile group 14 ('D:\APP\ADMINISTRATOR\WHBIDB_REDO\STANDBY14.LOG') size 1024m;
alter database add standby logfile group 15 ('D:\APP\ADMINISTRATOR\WHBIDB_REDO\STANDBY15.LOG') size 1024m;
alter database add standby logfile group 16 ('D:\APP\ADMINISTRATOR\WHBIDB_REDO\STANDBY16.LOG') size 1024m;

10.启动备库同步
SQL> alter database open read only;
Database altered.

SQL> alter database recover managed standby database disconnect from session using current logfile;
Database altered.

11.查看归档日志应用以及表数据是否恢复
SQL> select max(lh.SEQUENCE#) "Lastapplied arc", max(al.SEQUENCE#) "Last recieved arc"
       from v$log_history lh,v$archived_log al;

SQL> select count(1) from dba_tables;

----在备库上查看归档日志应用情况:  val.applied='YES' --已应用; val.applied='NO' --待应用;
PhyStdby:SQL>select thread#, sequence#, val.applied
from v$archived_log val, v$database vdb
where val.resetlogs_change# = vdb.resetlogs_change#;

Oracle DataGuard主库丢失归档日志后备库的RMAN增量恢复一例的更多相关文章

  1. dataguard主库删除归档日志后从库恢复的方法

    ------------------方法1在主库上使用备份的进行恢复丢失的归档日志-------------------------1.发现主库备份后删除了归档,但是这些归档从库还没应用,也没有传到从 ...

  2. dataguard 归档丢失(主库中无此丢失归档处理),备库基于SCN恢复

    dataguard 归档丢失(主库中无此丢失归档处理),备库基于SCN恢复 环境: OS: CentOS 6.5 DB: Oracle 10.2.0.5 1.主备库环境 主库: SQL> sel ...

  3. oracle RAC--归档日志的开启方法

    oracle RAC--归档日志的开启方法 2011-10-07 15:53:04 分类: Oracle oracle RAC--归档日志的开启方法   ======================= ...

  4. dataguard丢失归档日志处理

    检查alert日志发现报错如下 Wed Mar 27 15:40:30 2019Managed Standby Recovery not using Real Time ApplyParallel M ...

  5. oracle设置自动清理归档日志脚本

    设置定时自动清理归档日志脚本 root用户下 [root@localhost ~]# mkdir /nstg [root@localhost ~]# cd /nstg/ [root@localhost ...

  6. Oracle下定时删除归档日志脚本

    一.报错信息 前几天网站突然访问不了,并且报了如下错误: ora-27101: shared memory realm does not exist ora-01034: oracle not ava ...

  7. 21、oracle打开和关闭归档日志的方法

    21.1.介绍: 在实际应用中,我们需要实现对数据的备份,其实现方式主要有冷备份和热备份两种,现在我们主要讨论热备份的具体操作. 热备份也称为联机备份,在数据库的存档模式下进行备份,oracel数据库 ...

  8. DG备库无法接受主库归档日志之密码文件

    DG备库无法接受主库归档日志之密码文件 实验目的:还原某个客户案例,客户审计需要,对主库sys用户进行锁定,一小时后对sys用户进行解锁后,发现备库无法接受主库的归档日志 本篇文章,测试sys用户与D ...

  9. 【DATAGUARD】物理dg在主库丢失归档文件的情况下的恢复(七)

    [DATAGUARD]物理dg在主库丢失归档文件的情况下的恢复(七) 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到 ...

随机推荐

  1. Java 多线程基础(七)线程休眠 sleep

    Java 多线程基础(七)线程休眠 sleep 一.线程休眠 sleep sleep() 方法定义在Thread.java中,是 static 修饰的静态方法.sleep() 的作用是让当前线程休眠, ...

  2. class 类组件:

    ES6  中的class 类组件: // class 关键字:确定一个类型student以类的概念存在 class student{ //构造函数 是默认自动执行 // 初始化 name age 属性 ...

  3. debug PostgreSQL 9.6.18 using Eclipse IDE on CentOS7

    目录 debug PostgreSQL 9.6.18 using Eclipse IDE on CentOS7 1.概览 2.建立用户 3.编译postgre 4.启动Eclipse 5.设置环境变量 ...

  4. Python变量与基本数据类型

    Python变量与基本数据类型 前言 好了,从本章开始将正式进入Python的学习阶段.本章主要介绍的是Python变量与基本数据类型的认识,这些都是最基本的知识并且必须要牢靠掌握在心中. 注释 学习 ...

  5. Python3-shelve模块-持久化字典

    Python3中的shelve提供了持久化字典对象 和字典基本一个样,只不过数据保存在了文件中,没什么好说的,直接上代码 注: 1.打开文件后不要忘记关闭文件 2.键只能是字符串,值可以是任何值 3. ...

  6. jQuery处理默认配置参数(将一个或多个对象的内容合并到目标对象)

    问题 我们在封装一个函数时, 需要别人传递一个json对象作为参数, 而用户可能只传入部分参数, 这是就可以利用$extend()来与合并到默认JSON参数合并. // 程序需要的参数 var def ...

  7. 黑鸟码表BB10S骑行记录导入行者

    前言 开始骑车用行者app记录, 后来觉得每次都要开app很麻烦, 于是在骑友的推荐下入手了黑鸟BB10S, 使用了一段时间感觉还不错, 不过也遇到之前大家说的问题, 黑鸟不支持直接导出fit文件, ...

  8. node+ajax实战案例(3)

    3.用户注册实现 3.1.注册用户功能的实现逻辑 1 用户在表单上输入注册信息 2 点击注册后,收集用户在表单上输入的注册信息并且发送给后台 3 后台接收用户发送过来的注册信息 4 后台需要处理数据并 ...

  9. Centos7安装部署openstack--nova计算服务

    一.概述 使用OpenStack计算服务来托管和管理云计算系统.OpenStack计算服务是基础设施即服务(IaaS)系统的主要部分,模块主要由Python实现. OpenStack计算组件请求Ope ...

  10. JS中字符串和数组的相互转化

    题目:利用var s1=prompt("请输入任意的字符串:") ,可以获取用户输入的字符串,试编程将用户输入的字符串“反转”,并且将字符串输出. 思路:字符串对象的方法中并没有实 ...