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. 日志应用:切换完成后,确保新的备库开启日志应用。
相关推荐
拾忆,想起1 小时前
Spring拦截链揭秘:如何在复杂应用中保持控制力
java·数据库·spring
Bytebase1 小时前
AWS re:Invent 2024 现场实录 - It‘s all about Scale
运维·数据库·dba·开发者·数据库管理·devops
GreatSQL1 小时前
【GreatSQL优化器-10】find_best_ref
数据库
weisian1512 小时前
Mysql--基础篇--多表查询(JOIN,笛卡尔积)
数据库·mysql
LabVIEW开发2 小时前
LabVIEW数据库管理系统
数据库·labview
NineData2 小时前
NineData云原生智能数据管理平台新功能发布|2024年12月版
数据库·sql·算法·云原生·oracle·devops·ninedata
xsh801442423 小时前
Java Spring Boot监听事件和处理事件
java·前端·数据库
焱焱枫3 小时前
Oracle Database 23ai 新特性: UPDATE 和 DELETE 语句的直接联接
数据库·oracle
kikyo哎哟喂3 小时前
InnoDB存储引擎对MVCC的实现
数据库
IvorySQL3 小时前
IvorySQL 4.0 之兼容 Oracle 包功能设计思路解读
数据库