1 在主库端模拟数据库意外宕机 
主库操作

[oracle@localhost ~]$ sqlplus /nologSQL*Plus: Release 11.2.0.4.0 Production on Wed May 10 11:53:25 2017Copyright (c) 1982, 2013, Oracle.  All rights reserved.SQL> conn /as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.Total System Global Area 1043886080 bytes
Fixed Size          2259840 bytes
Variable Size         889193600 bytes
Database Buffers      146800640 bytes
Redo Buffers            5632000 bytes
Database mounted.
Database opened.
SQL> set lines 200;
SQL> select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique_name from v$database;NAME   LOG_MODE     OPEN_MODE        DATABASE_ROLE    SWITCHOVER_STATUS    DB_UNIQUE_NAME
--------- ------------ -------------------- ---------------- -------------------- ------------------------------
ORCL      ARCHIVELOG   READ WRITE       PRIMARY      TO STANDBY       orcl_pdSQL> alter system switch logfile;System altered.SQL> create table test  as select * from dba_objects;Table created.SQL> insert into test select * from test;86963 rows created.SQL> insert into test select * from test;173926 rows created.SQL> insert into test select * from test;347852 rows created.SQL> insert into test select * from test;695704 rows created.SQL> commit;Commit complete.SQL> select count(1) from test;COUNT(1)
----------1391408SQL> alter system switch logfile;System altered.备库查询SQL> select count(1) from test;COUNT(1)
----------1391408SQL> select thread#, low_sequence#, high_sequence# from v$archive_gap;no rows selected

如果没有发现明显的gap现象,说明此次的failover不会有数据损失情况。在standby端,要进行关闭apply和结束应用动作。

2 备库直接切换

[oracle@localhost ~]$ sqlplus /nologSQL*Plus: Release 11.2.0.4.0 Production on Wed May 10 11:53:40 2017Copyright (c) 1982, 2013, Oracle.  All rights reserved.SQL> conn /as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.Total System Global Area 1043886080 bytes
Fixed Size          2259840 bytes
Variable Size         889193600 bytes
Database Buffers      146800640 bytes
Redo Buffers            5632000 bytes
Database mounted.
Database opened.
SQL> alter database recover managed standby database disconnect from session;Database altered.SQL> SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#) AS LAST from V$ARCHIVETHREAD    LAST
---------- ----------1     40SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;no rows selectedSQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;SWITCHOVER_STATUS
--------------------
NOT ALLOWEDSQL>  alter database recover managed standby database cancel;Database altered.SQL>  alter database recover managed standby database finish; Database altered.SQL> set lines 200SQL> select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique_name from v$database;
NAME      LOG_MODE     OPEN_MODE        DATABASE_ROLE    SWITCHOVER_STATUS    DB_UNIQUE_NAME
--------- ------------ -------------------- ---------------- -------------------- ------------------------------
ORCL      ARCHIVELOG   READ ONLY        PHYSICAL STANDBY TO PRIMARY       orcl_stSQL> alter database commit to switchover to primary with session shutdown;Database altered.SQL> select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique_name from v$database;NAME    LOG_MODE     OPEN_MODE        DATABASE_ROLE    SWITCHOVER_STATUS    DB_UNIQUE_NAME
--------- ------------ -------------------- ---------------- -------------------- ------------------------------
ORCL      ARCHIVELOG   MOUNTED          PRIMARY      NOT ALLOWED      orcl_stSQL> alter database open; Database altered.SQL> select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique_name from v$database;NAME    LOG_MODE     OPEN_MODE        DATABASE_ROLE    SWITCHOVER_STATUS    DB_UNIQUE_NAME
--------- ------------ -------------------- ---------------- -------------------- ------------------------------
ORCL      ARCHIVELOG   READ WRITE       PRIMARY      RESOLVABLE GAP   orcl_stSQL> select open_mode from v$database;OPEN_MODE
--------------------
READ WRITESQL> select database_role from v$database;DATABASE_ROLE
----------------
PRIMARY

3 切换后的测试 
新主库执行

SQL> alter system switch logfile; System altered.SQL>  delete from test where rownum<=10000;10000 rows deleted.SQL> commit;Commit complete.SQL> select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique_name from v$database;NAME    LOG_MODE     OPEN_MODE        DATABASE_ROLE    SWITCHOVER_STATUS    DB_UNIQUE_NAME
--------- ------------ -------------------- ---------------- -------------------- ------------------------------
ORCL      ARCHIVELOG   READ WRITE       PRIMARY      FAILED DESTINATION   orcl_st

FAILED DESTINATION 表明 DG 现在不能同步了。新主库open_mode 为READ WRITE,database_role 为 PRIMARY 说明备库切换主库成功, 
 以上说明failover 过程成功。

4 原主库修复后,开机


SQL> startup
ORACLE instance started.Total System Global Area 1043886080 bytes
Fixed Size          2259840 bytes
Variable Size         889193600 bytes
Database Buffers      146800640 bytes
Redo Buffers            5632000 bytes
Database mounted.
Database opened.
SQL> alter database commit to switchover to physical standby with session shutdown;
alter database commit to switchover to physical standby with session shutdown
*
ERROR at line 1:
ORA-16416: No viable Physical Standby switchover targets availableSQL> select name, LOG_MODE, OPEN_MODE, database_role, SWITCHOVER_STATUS, db_unique_name from v$database; NAME    LOG_MODE     OPEN_MODE        DATABASE_ROLE    SWITCHOVER_STATUS    DB_UNIQUE_NAME
--------- ------------ -------------------- ---------------- -------------------- ------------------------------
ORCL      ARCHIVELOG   READ WRITE       PRIMARY      FAILED DESTINATION   orcl_pd

修复主库成功后,整个DG 架构已经破坏,需要将原主库删掉,根据ADG 方式重新搭建DG 环境,最后可以根据需要是否进行switchover切换来调整环境。

5 在原主库上重新搭建dg 

SQL> alter database close;Database altered.SQL> drop database;
drop database
*
ERROR at line 1:
ORA-12719: operation requires database is in RESTRICTED modeSQL>  alter system enable restricted session;System altered.SQL> drop database;Database dropped.[oracle@localhost ~]$ cd $ORACLE_HOME
[oracle@localhost db_1]$ cd /dbs
[oracle@localhost db_1]$ rm -rf spfileorcl.ora[oracle@localhost trace]$ rman target sys/oracle@orcl_pd auxiliary sys/oracle@orcl_stRecovery Manager: Release 11.2.0.4.0 - Production on Wed May 10 13:33:17 2017Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.connected to target database: ORCL (not mounted)
connected to auxiliary database: ORCL (DBID=1468135053)RMAN>  duplicate target database for standby from active database nofilenamecheck;Starting Duplicate Db at 10-MAY-17
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=20 device type=DISK
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 05/10/2017 13:33:29
RMAN-05501: aborting duplication of target database
RMAN-05502: the target database must be mounted when issuing a DUPLICATE command这里出现一个小插曲,我把以前的搭建dg 的语句直接拿来用,忘了新主库对应的服务名是orcl_st
此时应该将orcl_pd 和orcl_st 位置对调 就可以了 此命令在主备库执行都可以。切记服务名不要搞反了。[oracle@localhost trace]$ rman target sys/oracle@orcl_st auxiliary sys/oracle@orcl_pdRecovery Manager: Release 11.2.0.4.0 - Production on Wed May 10 13:36:42 2017Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.connected to target database: ORCL (DBID=1468135053)
connected to auxiliary database: ORCL (not mounted)RMAN> duplicate target database for standby from active database nofilenamecheck;Starting Duplicate Db at 10-MAY-17
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=21 device type=DISKcontents of Memory Script:
{backup as copy reusetargetfile  '/u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl' auxiliary format '/u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl'   ;
}
executing Memory ScriptStarting backup at 10-MAY-17
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=38 device type=DISK
Finished backup at 10-MAY-17contents of Memory Script:
{backup as copy current controlfile for standby auxiliary format  '/u01/app/oracle/oradata/orcl/control01.ctl';restore clone controlfile to  '/u01/app/oracle/fast_recovery_area/orcl/control02.ctl' from '/u01/app/oracle/oradata/orcl/control01.ctl';
}
executing Memory ScriptStarting backup at 10-MAY-17
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
copying standby control file
output file name=/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_orcl.f tag=TAG20170510T133702 RECID=8 STAMP=943623424
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 10-MAY-17Starting restore at 10-MAY-17
using channel ORA_AUX_DISK_1channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 10-MAY-17contents of Memory Script:
{sql clone 'alter database mount standby database';
}
executing Memory Scriptsql statement: alter database mount standby databasecontents of Memory Script:
{set newname for tempfile  1 to "/u01/app/oracle/oradata/orcl/temp01.dbf";switch clone tempfile all;set newname for datafile  1 to "/u01/app/oracle/oradata/orcl/system01.dbf";set newname for datafile  2 to "/u01/app/oracle/oradata/orcl/sysaux01.dbf";set newname for datafile  3 to "/u01/app/oracle/oradata/orcl/undotbs01.dbf";set newname for datafile  4 to "/u01/app/oracle/oradata/orcl/users01.dbf";set newname for datafile  5 to "/u01/app/oracle/oradata/orcl/example01.dbf";backup as copy reusedatafile  1 auxiliary format "/u01/app/oracle/oradata/orcl/system01.dbf"   datafile 2 auxiliary format "/u01/app/oracle/oradata/orcl/sysaux01.dbf"   datafile 3 auxiliary format "/u01/app/oracle/oradata/orcl/undotbs01.dbf"   datafile 4 auxiliary format "/u01/app/oracle/oradata/orcl/users01.dbf"   datafile 5 auxiliary format "/u01/app/oracle/oradata/orcl/example01.dbf"   ;sql 'alter system archive log current';
}
executing Memory Scriptexecuting command: SET NEWNAMErenamed tempfile 1 to /u01/app/oracle/oradata/orcl/temp01.dbf in control fileexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEStarting backup at 10-MAY-17
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf
output file name=/u01/app/oracle/oradata/orcl/system01.dbf tag=TAG20170510T133713
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:35
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
output file name=/u01/app/oracle/oradata/orcl/sysaux01.dbf tag=TAG20170510T133713
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:36
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=/u01/app/oracle/oradata/orcl/example01.dbf
output file name=/u01/app/oracle/oradata/orcl/example01.dbf tag=TAG20170510T133713
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
output file name=/u01/app/oracle/oradata/orcl/undotbs01.dbf tag=TAG20170510T133713
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:07
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/u01/app/oracle/oradata/orcl/users01.dbf
output file name=/u01/app/oracle/oradata/orcl/users01.dbf tag=TAG20170510T133713
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 10-MAY-17sql statement: alter system archive log currentcontents of Memory Script:
{switch clone datafile all;
}
executing Memory Scriptdatafile 1 switched to datafile copy
input datafile copy RECID=8 STAMP=943623527 file name=/u01/app/oracle/oradata/orcl/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=9 STAMP=943623527 file name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=10 STAMP=943623527 file name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=11 STAMP=943623527 file name=/u01/app/oracle/oradata/orcl/users01.dbf
datafile 5 switched to datafile copy
input datafile copy RECID=12 STAMP=943623527 file name=/u01/app/oracle/oradata/orcl/example01.dbf
Finished Duplicate Db at 10-MAY-17
-- rman 搭建dg 环境成功 需要将新备库应用到dg 环境
新备库执行
SQL> select open_mode from v$database; OPEN_MODE
--------------------
MOUNTEDSQL> alter database open; Database altered.SQL> select open_mode from v$database; OPEN_MODE
--------------------
READ ONLYSQL> alter database recover managed standby database disconnect from session; Database altered.SQL> select open_mode from v$database; OPEN_MODE
--------------------
READ ONLY WITH APPLY主库
SQL> select count(1) from test;COUNT(1)
----------1381408
SQL> alter system switch logfile;System altered.备库查询
SQL> select count(1) from test;COUNT(1)
----------1381408
数据跟主库同步

至此 dg 环境恢复成功。

如果想还原最初的环境 将现在的主备库switchover 后即可还原原始环境 ,switchover 可参考;

http://www.cndba.cn/leo1990/article/1910

adg 方式搭建dg 环境 可参考:

http://www.cndba.cn/leo1990/article/1873

Oracle DG Failover 操作相关推荐

  1. oracle failover 区别,Oracle DG failover 实战

    Oracle dataguard failover 实战 操作步骤 备库: SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH ...

  2. Oracle Dg 重建,DG Failover之后原主库恢复成standby重建加入DG

    一.原DG主备库需开启flashback database1.查看是否开启flashback主: SQL> select flashback_on from v$database LASHBAC ...

  3. oracle dg物理和逻辑,Oracle DG 物理Standby环境搭建

    Oracle Data Guard, 分逻辑Standby和物理Standby. 下面讲的是物理Standby环境的搭建步骤. 一.启用Force Logging 将Primary数据库置为Force ...

  4. ORACLE DG专题3--手把手部署DG 物理备库

    前言 笔者前文已介绍了ORACLE DG的成员身份与数据保护模式等相关理论知识,从本文开始,将进入ORACLE DG理论与实践相结合模式,深入理解ORACLE DG的内在原理与基本运维技能.本文讲述如 ...

  5. Oracle DG 之--DG Broker 配置基本概念

    Oracle DG 之DG Broker 配置 系统环境: 操作系统: RedHat EL55_64 Oracle:    Oracle 11.2.0.3.0 Data Guard 配置: 主库bjd ...

  6. oracle DG模式搭建详解

    oracle DG搭建 安装环境 在主机1上安装数据库软件,并建监听和实例,在主机2上安装数据库软件,并建监听,但不建实例,dg搭建之后数据会同步过去.    数据库参数优化(也可在spfile文件统 ...

  7. oracle操作错误还原,Oracle delete误操作数据恢复(BBED)

    Oracle delete误操作数据恢复(BBED) 在Oracle中,表数据被错误执行了delete,并 已 提交,如何找回数据呢? 常规的修复方法可以想到 闪回.Rman.impdp . DG . ...

  8. oracle如何往dg加盘_学习笔记:Oracle DG系统 主备库中表空间和数据文件增加删除等管...

    天萃荷净 Oracle Data Guard表空间和数据文件管理汇总 汇总日常工作中操作,在Oracle DG结构系统中,如何删除备库表空间和数据文件,如何管理主库与备库之间的文件系统,详见文章内容. ...

  9. 在dg中建立oracle,Oracle Dg配置过程

    Oracle Dg配置过程 发布时间:2020-03-02 23:51:19 来源:51CTO 阅读:834 作者:小陈子057 第一章:Dg理论讲述 Data Guard(简称:Dg)是oracle ...

最新文章

  1. lvs+keepalived实现双实例【双主模型】
  2. jQuery 定位到某个元素
  3. bcb异常处理显示错误行号_SpringBoot系列(七)- springboot 错误异常处理统一办法
  4. netflix_Netflix Archaius用于物业管理–基础知识
  5. --.net 面试题2
  6. 空指针/0/NULL
  7. python flask应用部署
  8. SVN分支管理那些事儿
  9. 谷歌学术——下载论文
  10. 第二章 工具变量法(IV)与两阶段最小二乘法
  11. html如何在背景的基础上添加文字,如何创建背景图片并在其上添加文字
  12. 玩客云手动设置IP地址
  13. 在c语言中保留字是有专门含义和作用的,c语言中的关键字和保留字的区别?
  14. HRBUST1313 火影忍者之~静音
  15. python制作英汉词典_Python基于有道实现英汉字典功能
  16. 面试时自我介绍最强参考卷
  17. 套用bi模板,轻松搞定各类数据分析报表
  18. android 模拟器 ROM RAM 空间设置
  19. LangChain vs Semantic Kernel
  20. 什么是客户终身价值(LTV)

热门文章

  1. Android编译系统的学习(一)
  2. Python数据攻略-Pandas数据分组GroupBy
  3. python支持double_python转换为double
  4. HEX转换为GRB 工具
  5. uni-app 微信小程序使用emqx爬坑记录
  6. 邮箱发送邮件(包含附件,网易、QQ)
  7. can滤波 dsp_DSP的CAN总线通信基础设计
  8. 视频相关的理论知识与基础概念
  9. WPS或EXCEL度分秒和十进制度之间的转换
  10. 史上最厉害的拼音打字高手间的对话