DataGuard物理standby管理 - 主备切换

  Dataguard的切换分为两种,switchover和failover。
  switchover一般用于数据库或硬件升级,这时只需要较短时间中断数据库访问,主备库的角色切换完成后,即可打开primary角色的备库来提供数据库访问。
  failover,主库已经无法使用,必须切换到备库,当备库failover切换为primary,则主库不再是dataguard的一部分,无法再转换为备库。
  如果是RAC的物理standby,则在执行切换时只能启动一个instance,切换完毕后再启动其他实例。

Switchover

  一定要按照先主库,后备库的顺序执行切换命令,否则会报错,如果强行切换就变成failover了。

主库端:
  由于主库是处于open状态,有访问的,所以v$database视图中,switchover_status为sessions active。而由primary切换到standby需要数据库为open状态,因此,执行切换命令时,带上with session shutdown选项即可。
  执行完切换命令后,关闭数据库,重新启动数据库到mount状态等待日志传输,开启日志应用。
  查看alert.log可以看到主库做了哪些动作:主库断开所有session(未提交事务会回滚),切换日志并归档,传输日志到备库,给备库一个End-Of-REDO的信号,切换为standby,重新启动到mount。

SYS@dev01> select database_role,switchover_status from v$database;

DATABASE_ROLE   SWITCHOVER_STAT
--------------- ---------------
PRIMARY         SESSIONS ACTIVE

SYS@dev01> alter database commit to switchover to physical standby with session shutdown;

Database altered.

SYS@dev01> shutdown immediate;
ORA-01507: database not mounted

ORACLE instance shut down.
SYS@dev01> startup mount;
ORACLE instance started.

Total System Global Area  536870912 bytes
Fixed Size                  2085288 bytes
Variable Size             209718872 bytes
Database Buffers          318767104 bytes
Redo Buffers                6299648 bytes
Database mounted.

SYS@dev01> alter database recover managed standby database using current logfile disconnect from session;

Database altered.

SYS@dev01> select database_role,switchover_status from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY SESSIONS ACTIVE

SYS@dev01>

备库端:
  确认是否可以切换为主库,如果switchover_status为recovery needed或switchover latent,需要apply完所有归档日志才能切换。如果是sessions active则带上with session shutdown选项。apply完所有日志后,即可切换为primary,然后打开数据库。
  查看alert.log可以看到备库做了哪些动作:接收主库日志,接收到主库End-Of-REDO的信号,apply完所有日志,清空online redo log以便打开数据库,切换为primary,打开数据库。

SYS@dev01dg> select database_role,switchover_status from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY SWITCHOVER LATENT

SYS@dev01dg> alter database commit to switchover to primary with session shutdown;
alter database commit to switchover to primary with session shutdown
*
ERROR at line 1:
ORA-16139: media recovery required

SYS@dev01dg> alter database recover managed standby database disconnect from session;

Database altered.

SYS@dev01dg> select database_role,switchover_status from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY TO PRIMARY

SYS@dev01dg> alter database commit to switchover to primary with session shutdown;

Database altered.

SYS@dev01dg> alter database open;

Database altered.

SYS@dev01dg> select database_role,switchover_status from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS
---------------- --------------------
PRIMARY          SESSIONS ACTIVE

SYS@dev01dg>

  以上过过程中,由于主库断开所有session并归档,传输日志到备库,发给备库End-Of-REDO的信号,因此正常switchover时,是不会丢失数据的。
  切换完成后可以在主库归档,验证一下是否切换成功,备库是否能正常接收日志。

Failover
  当主库当掉,无法使用时,此时的切换即为failover,如果保护模式为最大性能模式,是可能丢失数据的。

备库端:
  如果是最大保护和最大可用性模式,则可以直接在备库端执行failover切换。如果是最大性能模式,为了尽可能减少数据丢失,需要检查主库是否有日志没有传输到备库,手动传输备库进行注册和恢复。注意RAC环境下,归档日志是分线程的。

SYS@dev01dg> select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;

THREAD#          A
---------- ----------
         1        457

SYS@dev01dg>

[oracle@testdb dev01]$ scp * oracle@192.168.0.8:/u01/archive/dev01dg

  注册归档日志有如下两种方法,较为简单当然是用rman了,一次注册多个。
RMAN> catalog start with '/u01/archive/dev01';

SYS@dev01dg> alter database register logfile '/u01/archive/dev01dg/arch_e8fe6364_1_712757927_460.dbf';

  apply归档日志也有两种方法。

SYS@dev01dg> alter database recover managed standby database disconnect from session;

Database altered.

SYS@dev01dg>

SYS@dev01dg> recover standby database;
ORA-00279: change 2863819 generated at 03/20/2010 21:58:17 needed for thread 1
ORA-00289: suggestion : /u01/archive/dev01dg/arch_e8fe6364_1_712757927_461.dbf
ORA-00280: change 2863819 for thread 1 is in sequence #461

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
CANCEL
Media recovery cancelled.
SYS@dev01dg>

  当手动apply完所有日志后,就可以failover切换到primary了。但是要注意的时,由于备库没有收到主库End-Of-REDO的信号,所以直接转换会报错,要求介质恢复。此时需要提交命令告诉备库,日志恢复已经finish了,需要进行failover切换。注意switchover时千万不要带有finish选项,否则就会变成failover了。

SYS@dev01dg> alter database commit to switchover to primary with session shutdown;
alter database commit to switchover to primary with session shutdown
*
ERROR at line 1:
ORA-16139: media recovery required

SYS@dev01dg> select database_role,switchover_status from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY NOT ALLOWED

SYS@dev01dg> alter database recover managed standby database finish [force];

Database altered.

SYS@dev01dg> select database_role,switchover_status from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY TO PRIMARY

SYS@dev01dg> alter database commit to switchover to primary with session shutdown;

Database altered.

SYS@dev01dg> alter database open;

Database altered.

SYS@dev01dg> select database_role,switchover_status from v$database;

DATABASE_ROLE    SWITCHOVER_STATUS
---------------- --------------------
PRIMARY          SESSIONS ACTIVE

SYS@dev01dg>

  failover完成后,数据库其实是以resetlogs方式打开的,如果log_archive_format='arch_%d_%t_%r_%s.dbf',可以看到归档日志的文件名会有新的resetlogs ID和sequence number,以此与原有的归档日志进行区分。

(摘)DataGuard物理standby管理 - 主备切换的更多相关文章

  1. 物理Data Guard主备切换步骤

    物理Data Guard角色转换步骤   Step  1   验证主库是否能执行角色转换到备库(原主库执行) SQL> SELECT SWITCHOVER_STATUS FROM V$DATAB ...

  2. PostgreSQL Hot Standby的主备切换

    一. 简介:          PG在9.*版本后热备提供了新的一个功能,那就是Stream Replication的读写分离,是PG高可用性的一个典型应用.其中备库是只读库:若主库出现故障:备库这个 ...

  3. Oracle 12C 物理Standby 主备切换switchover

    Oracle 12C 物理Standby 主备切换switchover Oracle 12C 物理Standby 主备切换switchover Table of Contents 1. 简述 2. 切 ...

  4. Oracle DataGuard主备切换(switchover)

    Oracle DataGuard主备切换可以使用传统的手动命令切换,也可以使用dgmgr切换,本文记录手动切换. (一)将主库切换为物理备库 STEP1:查看主库状态 SQL> SELECT O ...

  5. Oracle 11.2.0.4.0 Dataguard部署和日常维护(5)-Datauard 主备切换和故障转移篇

    1. dataguard主备切换   1.1. 查看当前主备库是否具备切换条件 on slave select sequence#,first_time,next_time,archived,appl ...

  6. ORACLE11g Dataguard物理Standby 日常巡检操作手册

    ORACLE11g Dataguard物理Standby日常巡检操作手册 编写:_____________校对:_____________日期:_____________ 目录1.DG环境的日常巡检 ...

  7. 测试redis+keepalived实现简单的主备切换【转载】

    转自: 测试redis+keepalived实现简单的主备切换 - Try My Best 尽力而为 - ITeye技术网站http://raising.iteye.com/blog/2311757 ...

  8. 大话Spark(7)-源码之Master主备切换

    Master作为Spark Standalone模式中的核心,如果Master出现异常,则整个集群的运行情况和资源都无法进行管理,整个集群将处于无法工作的状态. Spark在设计的时候考虑到了这种情况 ...

  9. Spark系列(五)Master主备切换机制

    Spark Master主备切换主要有两种机制,之中是基于文件系统,一种是基于Zookeeper.基于文件系统的主备切换机制需要在Active Master挂掉后手动切换到Standby Master ...

随机推荐

  1. [Qt] IP地址输入框实现

    封装了一个ip地址的输入框.网络上下载了份代码,找不到哪里的了.经过修改之后,尽力让它的行为和windows的IP地址输入框的行为看起来像些.代码如下: //ipaddredit.h #ifndef ...

  2. MySQL删除外键定义的方法

    MySQL外键在定以后,如果我们不再需要这个外键,可以进行删除操作,下面就为您介绍MySQL删除外键定义的方法,供您参考. 不知道大家有没有发现,在定义外键的时候articles.member_id外 ...

  3. IOS设计模式学习(19)策略

    1 前言 面向对象软件设计中,我们可以把相关算法分离为不同的类,成为策略.与这种做法有关的一种设计模式成为策略模式. 2 详述 2.1 简述 策略模式中得一个关键角色是策略类,它为所有支持的或相关的算 ...

  4. Flex中的折线图

    1.问题背景 在Flex中,制作一个折线图.而且给折线图的横轴和纵轴进行样式设置,详细实现过程例如以下: 2.实现实例 (1)设置横轴样式和数据绑定 <mx:horizontalAxis> ...

  5. Transparency Tutorial with C# - Part 1

    Download demo project - 4 Kb Download source - 6 Kb Download demo project - 5 Kb Download source - 6 ...

  6. codeforce 437B The Child and Set

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  7. 关于一个下载的源代码中的”*.vssscc“文件的问题

    今天下载了一份程序的源代码,老是提示我要连接源代码管理服务器,这个……你的账号密码我怎么知道,有木有.于是上网搜罗了一番找来了解决方案,在这里分享给可能出现同样问题的童鞋. 首先说明一下什么是vsss ...

  8. JAVA正则表达式之贪婪、勉强和侵占

    在JAVA正则表达式中量词(quantifiers)允许指定匹配出现的次数,方便起见,当前 Pattern API 规范下,描述了贪婪.勉强和侵占三种量词.首先粗略地看一下,量词X?.X??和X?+都 ...

  9. 使用VS Code开发AngularJS 2 第一个应用程序

    使用VS Code开发AngularJS 2 第一个应用程序 目录 运行环境 创建项目 安装依赖包 创建TypeScript应用程序 配置应用程序 运行应用程序 运行环境 运行环境: Windows ...

  10. Ajax客户登陆验证

        服务器端操作方便之处我就不吹了,地球人都知道,它最烦莫过于页面刷新,头都被刷晕了,而且他在刷新的时候,还触发服务器端的事件,现在Ajax的出现,他们的结合是发展的必然!    一.介绍一下Aj ...