手把手教你Oracle DataGuard主备切换(switchover)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 手把手教你Oracle DataGuard主备切换(switchover)

Oracle DataGuard主备切换有两种方式,一种是手动,一种是使用dgmgr切换。今天主要来讲第一种。

一、手动切换

(一)先查看主备库的状态何日志是否正常

1、主库

  1. SQL>set line 300 pages 300
  2. select name,remote_archive,database_role,guard_status,db_unique_name from v$database;

  1. SQL>SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME  FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

2、备库

  1. SQL>set line 300 pages 300
  2. select name,remote_archive,database_role,guard_status,db_unique_name from v$database;

  1. SQL>SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME  FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

3、再查看是否可以进行切换

在主库

需要检查SWITCHOVER_STATUS参数,如果值为”SESSION ACTIVE”或者”TO STANDBY”, 则主数据库角色可以切换为备库角色。

  1. SQL> set line 300 pages 300
  2. SQL> SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE;

4、进行主备切换

将其切换到备库,切换后,数据库会关闭

  1. SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;

5、将主库启动到mount状态

  1. SQL> SHUTDOWN ABORT #11.2.0.4以下低版本执行,高版本不需要执行
  2. SQL> STARTUP MOUNT

6、将备库切换成主库并启动到open

查看备库状态

注意:需要检查SWITCH_STATUS参数,如果值为”SESSION ACTIVE”或”TO PRIMARY”,则备库可以切换为主库。

  1. SQL> SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE;

7、切换到主库

  1. SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;

8、打开数据库

此时数据库为mount状态,需打开数据库

  1. SQL> SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE;
  2. SQL> ALTER DATABASE OPEN ;

再次查看备份的SWITCHOVER_STATUS是否变为TO STANDBY

  1. SQL> SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE;

9、新的备库开启日志应用

  1. SQL> ALTER DATABASE OPEN;
  2. SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

10、验证是否切换成功

原主库现备库查看

  1. SQL> set linesize 999
  2. select name,open_mode,database_role,protection_mode,switchover_status from v$database;

原备库现主库查看

  1. SQL> set linesize 999
  2. select name,open_mode,database_role,protection_mode,switchover_status from v$database;

我们可以看到主备已经切换完成,整个过程也比较顺利。期间也出现了两个问题,现在总结一下。

1、切换过程中备库SWITCHOVER_STATUS状态为NOT ALLOWED。

解决方法:

先看告警日志

  1. SQL> show parameter dump;

  1. [oracle@standbynode trace]$cd /u01/app/oracle/diag/rdbms/orcl11gdg/orcl11g/trace

在trace目录下查看alert_orcl11g.log日志是否有告警

一般是因为主备库的数据没完全同步

  1. [oracle@standbynode ~]$ rman target /
  2. RMAN> list incarnation;

需重置备库化身和主库保持一致

备库

  1. SQL> shutdown immediate
  2. SQL> startup mount
  3. [oracle@standbynode ~]$rman target /
  4. RMAN> reset database to incarnation 3;
  5. RMAN> list incarnation;

打开备库和备库开启日志应用

  1. 开启备库
  2. SQL> alter database open;
  3. 备库开启日志实时应用
  4. SQL> alter database recover managed standby database using current logfile disconnect from session;
  5. 查看进程
  6. SQL> select pid,process, status, thread#,sequence#, block#, blocks from v$managed_standby;

2、切换过程中备库SWITCHOVER_STATUS状态为FAILED DESTINATION。

解决方法:

先看告警日志

  1. SQL> show parameter dump;

  1. [oracle@standbynode trace]$cd /u01/app/oracle/diag/rdbms/orcl11gdg/orcl11g/trace

在trace目录下查看alert_orcl11g.log日志是否有告警

一般是监听有问题或者主库状态异常。总之要学会看trace日志。

二、DG_BROKER

需要搭建DG_BROKER,后面再分享搭建的。其实最关键是将主备库的dg_broker_start的VALUE设置为true。然后进行监听之类的配置。

  1. SQL>alter system set dg_broker_start=true scope=both;
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5月前
|
运维 Oracle 容灾
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
Oracle dataguard 容灾技术实战(笔记),教你一种更清晰的Linux运维架构
|
2月前
|
Oracle 网络协议 安全
Oracle 11g DataGuard搭建保姆级教程
Oracle 11g DataGuard搭建保姆级教程
112 4
|
2月前
|
Oracle 网络协议 关系型数据库
Oracle DataGuard主备切换之自动切换
Oracle DataGuard主备切换之自动切换
69 2
|
5月前
|
Oracle 关系型数据库
oracle 19c 搭建dataguard 简要命令
通过service 完成dg 搭建。
147 0
|
11月前
|
Oracle 关系型数据库 数据库
Flink CDC中oracle dataguard模式下,有没有cdc备库的方案?
Flink CDC中oracle dataguard模式下,有没有cdc备库的方案?
164 1
|
Oracle 网络协议 关系型数据库
oracle 11g dataguard 配置步骤
oracle 11g dataguard 配置步骤
211 0
|
2月前
|
存储 自然语言处理 Oracle
Oracle数据库字符集概述及修改方式
【8月更文挑战第15天】Oracle 数据库字符集定义了数据的编码方案,决定可存储的字符类型及其表示方式。主要作用包括数据存储、检索及跨系统传输时的正确表示。常见字符集如 AL32UTF8 支持多语言,而 WE8MSWIN1252 主用于西欧语言。修改字符集风险高,可能导致数据问题,需事先备份并评估兼容性。可通过 ALTER DATABASE 语句直接修改或采用导出-导入数据的方式进行。完成后应验证数据完整性。此操作复杂,须谨慎处理。
|
2月前
|
数据采集 Oracle 关系型数据库
实时计算 Flink版产品使用问题之怎么实现从Oracle数据库读取多个表并将数据写入到Iceberg表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
25天前
|
Oracle 关系型数据库 数据库
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
打开oracle数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。 数据库没有备份,无法通过备份去恢复数据库。用户方联系北亚企安数据恢复中心并提供Oracle_Home目录中的所有文件,急需恢复zxfg用户下的数据。 出现“system01.dbf需要更多的恢复来保持一致性”这个报错的原因可能是控制文件损坏、数据文件损坏,数据文件与控制文件的SCN不一致等。数据库恢复工程师对数据库文件进一步检测、分析后,发现sysaux01.dbf文件损坏,有坏块。 修复并启动数据库后仍然有许多查询报错,export和data pump工具使用报错。从数据库层面无法修复数据库。
数据库数据恢复—Oracle数据库文件出现坏块的数据恢复案例
|
13天前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—异常断电导致Oracle数据库数据丢失的数据恢复案例
Oracle数据库故障: 机房异常断电后,Oracle数据库启库报错:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。数据库没有备份,归档日志不连续。用户方提供了Oracle数据库的在线文件,需要恢复zxfg用户的数据。 Oracle数据库恢复方案: 检测数据库故障;尝试挂起并修复数据库;解析数据文件。