Oracle 12C 物理Standby 主备切换switchover

Oracle 12C 物理Standby 主备切换switchover

1 简述

Oracle 12C 为DG 的运维提供了很多的改进。这里提到的就是其中之一的:物理DG 主备的一键切换。 所谓的一键就是一条命令。该命令会执行相关的检查,并将11g 的切换步骤进行封装执行。如果不符合 切换条件,会在命令行窗口及日志中给出相应的提示。

2 切换检查

Oracle 为DG 切换提供了的专门的检查命令:

alter database switchover to <target standby db_unique_name> verify;

以上命令会验证如下信息:

  • 验证数据库的版本至少为 12.1
  • 主库 REDO 传输正常。
  • 备库 MRP 进程正常运行并且与主库同步。

如果一切正常,数据库会反馈以下消息

SQL> alter database switchover to chicago verify;

Database altered.

主库日志:

SWITCHOVER VERIFY: Send VERIFY request to switchover target CHICAGO

SWITCHOVER VERIFY COMPLETE

Completed: alter database switchover to chicago verify

如果不正常,会有报错信息,一般是 ORA-16470 或者 ORA-16475.

3 问题及解决方法

由于某些原因,可能我们的dataguard配置并不支持切换。这里列出对常见两个错误的 解决思路。

3.1 ORA-16470

示例:

SQL>alter database switchover to chicago verify;

ORA-16470: Redo Apply is not running on switchover target

这种情况说明数据没有正常同步,需要同步完成后,再进行切换。 在备库执行以下命令:

alter database recover managed standby  database disconnect;

3.2 ORA-16475

ORA-16475 错误是一个入口性质的错误,只反馈给我们检查成功,但是可能还会存在问题。 具体问题, 在primary 或者 standby 的alert日志中会有提示。命令行窗口的错误如下:

SQL> alter database switchover to chicago verify;

ERROR at line 1:

ORA-16475: succeeded with warnings, check alert log for more details

3.2.1 dirty redo log

如果redo log 中存在脏数据,需要清除,会遇到如下错误: 主库日志:

-----Primary Alert log-----------

SWITCHOVER VERIFY WARNING: switchover target has dirty online redo logfiles that require clearing.

It takes time to clear online redo logfiles. This may slow down switchover process.
检查 redo 日志路径转换设置
show parameter logfile_name_convert

如果没有设置使用如下命令进行设置:

alter system set LOG_FILE_NAME_CONVERT='本地路径','目标端路径' scope=spfile;
注意
重启备库并且启动 MRP。当重启备库并且启动 MRP,将清除所有备库的 log_file_name_convert 参数设置的日志。
检查临时文件

确认主库和备库的临时数据文件匹配
临时数据文件在创建备库之后,不会同时创建临时数据文件,用如下的命令查询临时数据文件,并且在备库进行创建。

col name for a45
select ts#,name,ts#,status from v$tempfile;
注意
对于多个备库的环境,确保每个备库与主库同步。

3.2.2 log_archive_dest_n

standby 端*log_archive_dest_n* 参数配置不正确或者没有配置时也会出现 ORA-16475 错误,alert日志如下:

SWITCHOVER VERIFY: Send VERIFY request to switchover target S1202
SWITCHOVER VERIFY COMPLETE
SWITCHOVER VERIFY WARNING: switchover target has no standby database definedin LOG_ARCHIVE_DEST_n parameter. If the switchover target is converted to
a primary database, the new primary database will not be protected.ORA-16475 signalled during: ALTER DATABASE SWITCHOVER TO S1202 VERIFY...
  • 检查log_archive_dest_n 是否设置 对于一个standby的情况下,我们一般设置的是 log_archive_dest_2.

    show parameter log_archive_dest
    

    检查除了log_archive_dest_1 外是否有配置其他参数。如果没有配置,使用如下命令进行配置:

    alter system set log_archive_dest_2='SERVICE=&tnsname ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=&standby_db_unique_name;
    
  • 检查switchover_status

    select switchover_status from v$database;
    

    switchover_status 的值为 UNRESOLVABLE GAP(RAC 或者非 RAC),通过以下方法解决:

    • 检查是否有些线程已关闭但是仍存在

      col instance for a10
      set lines 32767
      select thread#,instance,status from v$thread;

      结果示例如下:

         THREAD# INSTANCE   STATUS
      ---------- ---------- ------
      1 gsboss OPEN
      2 gsboss2 OPEN

      将存在的线程disable:

      ALTER DATABASE DISABLE THREAD &thread#;
      
    • 检查 log_archive_destination 是否是否可用

      select status,DEST_ID,TYPE,ERROR,GAP_STATUS,SYNCHRONIZED,SYNCHRONIZATION_STATUS,RECOVERY_MODE from V$ARCHIVE_DEST_STATUS where STatus <> 'INACTIVE';
      

      如果存在路径不可用的情况,修改为可用路径。或者解决路径权限等问题。

4 切换角色

在主库和备库同时开启 trace,用于发生问题时候的诊断。

alter system set log_archive_trace=8191 sid=’*’;

4.1 切换备库角色为主库

主库 - Boston, 备库为chicago.

alter database switchover to chicago;

以下是主库(BOSTON)和备库(CHICAGO)的 alert 输出:

  • 主库日志:

    Fri Aug 23 11:05:23 2013
    
    ALTER SYSTEM SET log_archive_trace=8191 SCOPE=BOTH;
    
     alter database switchover to chicago
    
    Fri Aug 23 11:05:43 2013
    
    Starting switchover [Process ID: 3340]
    
    Fri Aug 23 11:05:43 2013
    
    ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY [Process Id: 3340] (boston)
    
    .
    
    Fri Aug 23 11:05:44 2013
    
    Active, synchronized Physical Standby switchover target has been identified
    
    Preventing updates and queries at the Primary
    
    Generating and shipping final logs to target standby
    
    Switchover End-Of-Redo Log thread 1 sequence 11 has been fixed   <--------- 序列号 11 是日志的终止序号
    
    Switchover: Primary highest seen SCN set to 0x0.0x229306
    
    ARCH: Noswitch archival of thread 1, sequence 11
    
    .
    
    Switchover: Primary controlfile converted to standby controlfile succesfully.
    
    Switchover: Complete - Database shutdown required
    
    Sending request (convert to primary database) to switchover target CHICAGO
    
    OCISessionBegin with PasswordVerifier succeeded
    
    Switchover complete. Database shutdown required
    
    USER (ospid: 3340): terminating the instance
    
    Fri Aug 23 11:05:51 2013
    
    Instance terminated by USER, pid = 3340
    
    Completed:  alter database switchover to chicago
    
  • 备库日志:

    Fri Aug 23 11:05:47 2013
    
    SWITCHOVER: received request 'ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY' from primary database.
    
    Fri Aug 23 11:05:47 2013
    
    ALTER DATABASE SWITCHOVER TO PRIMARY (chicago)
    
    Maximum wait for role transition is 15 minutes.
    
    .
    
    Standby became primary SCN: 2265860
    
    Switchover: Complete - Database mounted as primary
    
    SWITCHOVER: completed request from primary database.
    
    注意
    备库一端只最多只等待15分钟,实现备库与主库的同步。

4.2 打开新的主库

alter database open;

4.3 重启新的备库

shutdown abort
startup
-- 开启数据同步
alter database recover managed standby database disconnect;

5 切换后的后续步骤

  • 关闭 trace
alter system set log_archive_trace=0;
  • 确认DG同步

    • 在主库侧执行

      alter system switch logfile;
      select dest_id,error,status from v$archive_dest where dest_id=<your remote log_archive_dest_<n>>;
      select max(sequence#),thread# from v$log_history group by thread#;
    • 在备库侧

      select thread#,sequence#,process,status from gv$managed_standby;
      select max(sequence#),thread# from v$archived_log group by thread#;
  • 在 12.2 中使用 v$dataguard_process 替代 v$managed_standby
select name,role,instance,thread#,sequence#,action from gv$dataguard_process;

Author: halberd.lee

Created: 2019-06-19 Wed 14:19

Validate

Oracle 12C 物理Standby 主备切换switchover的更多相关文章

  1. Oracle DataGuard主备切换(switchover)

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

  2. (摘)DataGuard物理standby管理 - 主备切换

    DataGuard物理standby管理 - 主备切换 Dataguard的切换分为两种,switchover和failover. switchover一般用于数据库或硬件升级,这时只需要较短时间中断 ...

  3. 物理DG主备库切换时遇到ORA-16139: media recovery required错误

    在物理DG主备库切换时遇到ORA-16139: media recovery required错误 SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRI ...

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

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

  5. oracle11g ADG主备切换

    oracle11g ADG主备切换 1.主库 SQL> select name,open_mode,switchover_status from v$database; NAME OPEN_MO ...

  6. 使用broker进行Datagurd主备切换报ORA-12514异常

    在使用Datagurd broker进行Datagurd主备切换时报ORA-12514监听异常, 详细信息如下: DGMGRL> switchover to xiaohe; Performing ...

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

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

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

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

  9. Postgres主备切换

    主备查询 主备不会自动切换(即需要实现线上环境主数据库宕掉之后,从数据库能够自动切换为主数据库,需要借用第三方软件,例如heartbeat等) (1)如何查看是primary还是standby 方法1 ...

随机推荐

  1. Java数据结构浅析

    程序 = 数据结构 + 算法 本文概述Java中常用的数据结构,并简述其使用场景 1. 数据结构的定义 数据结构是一种逻辑意义,指的是逻辑上的数据组织方式及相应的处理,与数据在磁盘的具体存储方式不完全 ...

  2. spring-02

    spring-02 1.谈谈你对 Spring 的理解 Spring 是一个开源框架,为简化企业级应用开发而生.Spring 可以是使简单的 JavaBean 实现以前只有 EJB 才能实现的功能.S ...

  3. python 3.4.3 安装pygame

    之前一直都是用的python3.5,后来接触了pygame,又被python3.5的打包折磨的死去活来,后来干脆用python 3.4.3. 我之前安装轮子都是直接打开cmd,然后 pip3 inst ...

  4. QTP(13)

    练习1:Flight4a 要求: a.录制Flight4a登录+购票+退出业务流程 b.实现登录1次,购票3次,退出1次 c.对Fly From.Fly to.航班实现随机参数化 随机参数化:Rand ...

  5. 对bloom的理解 及优化

    varying uv放到vs 讲下bloom的细节 上图这种做法 temporally stable box filtering up 的时候 需要filter 上述upscale有两张srv dow ...

  6. Linux下mount存储盘遇到的错误

    一.注意点 1.超过1T的盘,创建的分区要查看是否初始化为了GPT格式. 2.如果新添加的盘是从存储上挂载的,涉及到多路径的问题,挂载的是多路径的盘符,比如:/dev/mapper/mpatha(对应 ...

  7. java 和 c#返回值方法

    java 和 c#都是应用很广泛的语言,也互有优劣. 这两者都是面向对象的语言,在一个方法中如果类型不是void那么是需要return一个返回值的. 但是如果想要返回多个值该怎么办? 排除直接返回一个 ...

  8. linux运维、架构之路-K8s数据管理

    一.Volume介绍 容器和Pod是短暂的,它们的生命周期可能很短,会被频繁的销毁和创建,存在容器中的数据会被清除,为了持久化保存容器的数据,k8s提供了Volume.Volume的生命周期独立于容器 ...

  9. 深度学习笔记(十四)车道线检测 SCNN

    论文:Spatial As Deep: Spatial CNN for Traffic Scene Understanding 代码:https://github.com/XingangPan/SCN ...

  10. CentOS8编译openocd-0.10.0

    1.sudo yum install libusbx-devel 2. ./configure --prefix=$HOME/openocd-0.10.0 --enable-jlink CFLAGS= ...