Oracle DataGuard 主备正常切换 (Switchover)

前言

众所周知,DataGuard 的切换分为两种情况:

  1. 系统正常情况下的切换 :这种方式称为 switchover,是无损切换,不会丢失数据。
  2. 灾难情况下的切换 :这种情况下一般主库已经启动不起来了,称为 failover,有可能会丢失数据,并且切换后原主库不再是该 Data Guard 配置的一部分。

Oracle DataGuard主备切换可以使用传统的手动命令切换,也可以使用dgmgr切换,本文将重点介绍在正常情况下运行的DG手动切换测试。

(一)将主库切换为物理备库

步骤 1:查看主库状态

sql 复制代码
SQL> SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE;

OPEN_MODE            DATABASE_ROLE    SWITCHOVER_STATUS    FOR_DATAGUAR GUARD_S
-------------------- ---------------- -------------------- ------------ --------
READ WRITE           PRIMARY          SESSIONS ACTIVE      YES          DISABLED NONE

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

步骤 2:将其切换到备库,切换后,数据库会关闭

sql 复制代码
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY [WITH SESSION SHUTDOWN];

注意:如果上一步的 SWITCHOVER_STATUS 参数值为 "TO STANDBY ",则 WITH SESSION SHUTDOWN 可以省略。

步骤 3:启动到 mount 状态

sql 复制代码
SQL> SHUTDOWN ABORT
SQL> STARTUP MOUNT

注意:11.2.0.4 版本及其以上版本不需要执行 SHUTDOWN ABORT,因为数据库已经在步骤 2 命令中关闭了。

(二)将备库切换成主库并启动到 open

步骤 1:查看备库状态

sql 复制代码
SQL> SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE;

OPEN_MODE            DATABASE_ROLE    SWITCHOVER_STATUS    FOR_DATAGUAR GUARD_S
-------------------- ---------------- -------------------- ------------ --------
READ ONLY WITH APPLY PHYSICAL STANDBY TO PRIMARY           YES          DISABLED NONE

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

步骤 2:切换到主库

sql 复制代码
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY [WITH SESSION SHUTDOWN];

注意:如果上一步的 SWITCHOVER_STATUS 参数值为 "TO PRIMARY ",则 WITH SESSION SHUTDOWN 可以省略。

步骤 3:此时数据库为 mount 状态,需打开数据库

sql 复制代码
SQL> SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE;

OPEN_MODE            DATABASE_ROLE    SWITCHOVER_STATUS    FOR_DATAGUAR GUARD_S
-------------------- ---------------- -------------------- ------------ --------
MOUNTED              PRIMARY          NOT ALLOWED          YES          DISABLED NONE
SQL> ALTER DATABASE OPEN;
Database altered.
SQL> SELECT OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, FORCE_LOGGING, DATAGUARD_BROKER, GUARD_STATUS FROM V$DATABASE;

OPEN_MODE            DATABASE_ROLE    SWITCHOVER_STATUS    FOR_DATAGUAR GUARD_S
-------------------- ---------------- -------------------- ------------ --------
READ WRITE           PRIMARY          TO STANDBY           YES          DISABLED NONE
(三)新的备库开启日志应用
sql 复制代码
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

总结

通过上述步骤,可以完成 Oracle DataGuard 的主备切换。以下是一些注意事项:

  1. 检查 SWITCHOVER_STATUS :在进行切换前,确保 SWITCHOVER_STATUS 参数允许切换。
  2. 关闭和启动数据库:在切换过程中,确保数据库正确关闭和启动。
  3. 日志应用:切换完成后,确保新的备库开启日志应用。
相关推荐
TDengine (老段)14 分钟前
TDengine Rust 连接器进阶指南
大数据·数据库·物联网·rust·时序数据库·tdengine·涛思数据
二哈喇子!19 分钟前
MySQL数据库操作命令【SQL语言】
数据库·sql·视图与索引
China_Yanhy21 分钟前
AWS S3 深度配置指南:每一栏每个选项有什么作用
java·数据库·aws
yong999024 分钟前
基于MATLAB的大变形悬臂梁求解程序
前端·数据库·matlab
施嘉伟27 分钟前
Oracle SQL Profile 固化执行计划实战说明
数据库·sql·oracle
Dr.Alex Wang32 分钟前
Google Firebase 实战教学 - Streamlit、Bucket、Firebase
数据库·python·安全·googlecloud
程序 代码狂人44 分钟前
SQL-速查表:NULL 相关函数对比
数据库·sql
kaico20181 小时前
MYSQL的日志文件
数据库·mysql
oMcLin1 小时前
如何在AlmaLinux 9上优化MariaDB Galera Cluster,提升数据库集群的事务一致性与并发处理能力?
数据库·mariadb
yuankunliu1 小时前
【redis】1、Redis的安装部署
数据库·redis·缓存