原来 Oracle 19c ADG Switchover 切换如此简单

3e17c306506f387157b5961addff3e67.gif

作者 | JiekeXu

来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)

如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)

大家好,我是 JiekeXu,江湖人称“强哥”,荣获 Oracle ACE Pro 称号,墨天轮 MVP,墨天轮年度“墨力之星”,拥有 Oracle 11g OCP/OCM 认证,MySQL 5.7/8.0 OCP 认证以及 PCA、PCTA、OBCA、OGCA、KCP 等众多国产数据库认证证书,今天和大家一起来看看原来 Oracle 19c ADG Switchover 切换如此简单欢迎点击最上方蓝字“JiekeXu DBA之路”关注我的微信公众号,然后点击右上方三个点“设为星标”置顶,更多干货文章才能第一时间推送,谢谢!

目   录

前 言
环境说明
切换前准备
正式 Switchover 切换
生产环境切换演示过程

参考链接

前  言

近期有一套 Oracle 19c RAC Non-CDB 环境由于某种原因需要迁移到新的存储和主机上,计划使用 ADG Switchover 切换进行操作。之前也写过一篇《Oracle 19c ADG Swithover 切换手册》,包含一些切换前的检查步骤,沿用 Oracle 11g 的切换语法操作 19c 也是正常切换了。殊不知从 Oracle 12.1 开始有更简洁的切换命令,今天就来试试。

环境说明

环境示意图大概如下,将新搭建的 RAC 备库切换为主库,原备库跟在新主库后,异地灾备库不受影响。

c1f6952c1ecd80b6e5222990df30ad7c.png

切换前准备

Switchover 切换比较简单,但在切换前需要检查相关参数设置是否正常。

参数检查,比如下面的几个参数

show parameter arch
show parameter db_file_name_convert
show parameter log_file_name_convert
show parameter standby_file_management
show parameter fal_client
show parameter fal_server
show parameter log_archive

然后检查备库是否出现延迟。

-- 检查同步延迟
set linesize 150;
set pagesize 20;
column name format a13;
column value format a20;
column unit format a30;
column TIME_COMPUTED format a30;
select name,value,unit,time_computed,datum_time from v$dataguard_stats where name in ('transport lag','apply lag');

如果按照以前的经验则需要再检查这两套环境的参数,然后在各自环境上先关闭实例二,进而在主库先切换成备库,在备库上取消日志应用然后切换为主库,正常情况下则就完成了 ADG Switchover 切换。

2297daba9f2499b597ccbd5460e0e504.png

现如今,在 Oracle 12c 及以上的版本中,变得更加简单,只需要一条命令就搞定了主备切换,是的,你没看错,就一条命令搞定。

bcab8bd5489900cfcaf467f08d4c06ec.png

首先我们验证目标备库是否已准备好进行切换。

新的切换语句有一个 VERIFY 选项,可以检查切换所需的许多条件。检查的项目包括:

  • 切换目标上是否正在运行重做应用;

  • 切换目标的发行版本是否为 12.1 或更高版本;

  • 切换目标是否同步;

  • 以及是否正在运行 MRP。

主库:DB_UNIQUE_NAME JIEKEXU
备库:DB_UNIQUE_NAME   JIEKEXUADG

在 JIEKEXU 主库上发出如下 SQL:

ALTER DATABASE SWITCHOVER TO JIEKEXUADG(adg:db_unique_name) VERIFY;

如果检查备库不满足切换为主库的条件,此验证命令则报错。例如:

SQL> ALTER DATABASE SWITCHOVER TO JIEKEXUADG VERIFY;
ERROR at line 1:
ORA-16470: Redo Apply is not running on switchover target


SQL> ALTER DATABASE SWITCHOVER TO JIEKEXUADG VERIFY;
ERROR at line 1:
ORA-16475: succeeded with warnings, check alert log for more details

然后如果此操作成功, Alter 日志则会返回一条消息,在此示例中返回了 ORA-16470 错误。此错误意味着切换目标JIEKEXUADG 尚未准备好进行切换。切换操作之前必须启动 Redo Apply。启动 Redo Apply 后,再次发出 VERIFY 语句,但是,错误指示的警告 ORA-16475 可能会影响切换性能。Alter 日志包含类似以下内容的消息:

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.
翻译:切换验证警告:切换目标有需要清除的脏联机重做日志文件。清除联机重做日志文件需要时间。这可能会减慢切换过程。

修复这些问题后,或者如果切换性能不重要,则可以忽略这些警告。在完成您认为必要的任何修复后,再次发出以下验证 SQL 语句:

SQL> ALTER DATABASE SWITCHOVER TO JIEKEXUADG VERIFY;
Database altered.

没有报错说明切换目标 JIEKEXUADG 现已准备好可以进行切换。

正式 Switchover 切换

在 JIEKEXU 主库上发出如下 SQL:

SQL> ALTER DATABASE SWITCHOVER TO JIEKEXUADG;
Database altered.

如果上面 SQL 没有发生错误,则我们将继续将新主库 JIEKEXUADG 打开数据库(原备库目前处于 mount 状态,角色为 PRIMARY)。

SQL> ALTER DATABASE OPEN;


SQL> select open_mode,database_role from v$database;


OPEN_MODE            DATABASE_ROLE
-------------------- ----------------
READ WRITE           PRIMARY

然后另一个节点目前也是出于 mount 状态,我们需要将其打开即可。

原主库 JIEKEXU 则处于关闭状态,但角色已经是只读备库了,我们需要将其启动,应用 MRP0 进程。

SQL> STARTUP;


SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
生产环境切换演示过程

根据最开始的环境说明架构图,我们在 19c 主库 A 上,发起一个 verify 验证命令,当执行成功后,我们则开始切换。

--75.41  19c 主库 A 节点 1
-- 检查是否满足切换条件
alter database switchover to jiekxustd verify;


-- 执行切换
alter database switchover to jiekxustd;

如下,则是 alert 日志的详细信息,关键信息处我有注释,感兴趣的朋友可以自行查看。

-- 开始进行 verify 验证,但是出现了 ORA-16475 错误


alter database switchover to jiekxustd verify
2024-09-07T10:27:58.306517+08:00
SWITCHOVER VERIFY: Send VERIFY request to switchover target jiekxuSTD
2024-09-07T10:27:58.569049+08:00
SWITCHOVER VERIFY WARNING: switchover target has no standby database defined in 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 jiekxustd verify...
2024-09-07T10:28:11.096746+08:00
Redo thread 2 internally disabled at seq 1494915 (CKPT)
2024-09-07T10:28:12.421928+08:00
ARC2 (PID:95808): Archiving disabled T-2.S-1494915
2024-09-07T10:28:12.434314+08:00
ARC2 (PID:95808): Archived Log entry 7915636 added for T-2.S-1494915 ID 0x30a949 LAD:1
2024-09-07T10:29:58.493582+08:00
ALTER SYSTEM SET log_archive_dest_state_4='ENABLE' SCOPE=MEMORY SID='*';


----修正后继续 verify 验证,没有报错。


2024-09-07T10:30:27.885453+08:00
alter database switchover to jiekxustd verify
2024-09-07T10:30:28.178822+08:00
SWITCHOVER VERIFY: Send VERIFY request to switchover target jiekxuSTD
SWITCHOVER VERIFY COMPLETE: READY FOR SWITCHOVER
Completed: alter database switchover to jiekxustd verify
--开始切换,在原库 A 库节点 1 执行


alter database switchover to jiekxustd
2024-09-07T10:31:00.894689+08:00
NET  (PID:52154): The Time Management Interface (TMI) is being enabled for role transition
NET  (PID:52154): information.  This will result in messages beingoutput to the alert log
NET  (PID:52154): file with the prefix 'TMI: '.  This is being enabled to make the timing of
NET  (PID:52154): the various stages of the role transition available for diagnostic purposes.
NET  (PID:52154): This output will end when the role transition is complete.
TMI: dbsdrv switchover to target BEGIN 2024-09-07 10:31:00.895255
NET  (PID:52154): Starting switchover [Process ID: 52154]
TMI: kcv_switchover_to_target convert to physical BEGIN 2024-09-07 10:31:01.175547
2024-09-07T10:31:01.175676+08:00
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY [Process Id: 52154] (jiekxu1)
--原主库 A 库 switchover 完成后,则自动关闭实例


TMI: dbsdrv switchover to target END 2024-09-07 10:31:39.506972
Completed: alter database switchover to jiekxustd
Shutting down ORACLE instance (abort) (OS id: 52154)
Shutdown is initiated by sqlplus@xr-jiekxu-rac1 (TNS V1-V3).
License high water mark = 617
2024-09-07T10:31:39.632412+08:00
Instance shutdown complete (OS id: 52154)


--这里手动 startup A 库实例,开启 mrp0 应用日志


2024-09-07T10:34:27.066622+08:00
Starting ORACLE instance (normal) (OS id: 14744)


2024-09-07T10:34:27.199847+08:00

如下是原备库新 RAC 备库 D 的 RAC1 的 alert 日志,感兴趣的可以看看。

-- 192.168.75.11 备库 D RAC1 alert 


-- 原库主库 A 执行 verify 命令,备库 D 开始 SWITCHOVER VERIFY 验证
2024-09-07T10:27:58.425521+08:00
SWITCHOVER VERIFY BEGIN
SWITCHOVER VERIFY WARNING: no standby database is defined in LOG_ARCHIVE_DEST_n to protect this database if it is converted to a primary database
SWITCHOVER VERIFY COMPLETE


-- 修复问题后,原库主库 A 第二次执行 verify 命令,很快执行完毕


2024-09-07T10:30:28.301628+08:00
SWITCHOVER VERIFY BEGIN
SWITCHOVER VERIFY COMPLETE


-- 原库主库 A 执行 alter database switchover to jiekxustd 后,备库也开始切换,
-- 执行来自主库的命令“'ALTER DATABASE COMMIT TO SWITCHOVER  TO PRIMARY' from primary database”


2024-09-07T10:31:01.022557+08:00
 rfs (PID:65797): krsr_rfs_atc: Identified database type as 'PHYSICAL STANDBY': Client is Foreground (PID:52154)
2024-09-07T10:31:01.315903+08:00
 rfs (PID:65935): krsr_rfs_atc: Identified database type as 'PHYSICAL STANDBY': Client is Foreground (PID:78461)
2024-09-07T10:31:04.356410+08:00
 rfs (PID:65974): krsr_rfs_atc: Identified database type as 'PHYSICAL STANDBY': Client is Foreground (PID:52154)
2024-09-07T10:31:04.401664+08:00
 rfs (PID:65974): Selected LNO:11 for T-1.S-2395893 dbid 4212766427 branch 1037405632
2024-09-07T10:31:05.566551+08:00
PR00 (PID:72131): Resetting standby activation ID 3189065 (0x30a949)
2024-09-07T10:31:05.567668+08:00
Media Recovery End-Of-Redo indicator encountered
2024-09-07T10:31:05.567693+08:00
Media Recovery Continuing
PR00 (PID:72131): Media Recovery Waiting for T-1.S-2395894
2024-09-07T10:31:06.556422+08:00
.... (PID:66252): The Time Management Interface (TMI) is being enabled for role transition
.... (PID:66252): information.  This will result in messages beingoutput to the alert log
.... (PID:66252): file with the prefix 'TMI: '.  This is being enabled to make the timing of
.... (PID:66252): the various stages of the role transition available for diagnostic purposes.
.... (PID:66252): This output will end when the role transition is complete.
SWITCHOVER: received request 'ALTER DATABASE COMMIT TO SWITCHOVER  TO PRIMARY' from primary database.
2024-09-07T10:31:06.557276+08:00
ALTER DATABASE SWITCHOVER TO PRIMARY (jiekxu1)
Maximum wait for role transition is 15 minutes.


-- 等待 MRP0 完成,取消 MRP0 进程


TMI: kcv_commit_to_so_to_primary wait for MRP to finish BEGIN 2024-09-07 10:31:06.557329
Switchover: Media recovery is still active
 rmi (PID:66252): Role Change: Canceling MRP - no more redo to apply
2024-09-07T10:31:06.602122+08:00
PR00 (PID:72131): MRP0: Background Media Recovery cancelled with status 16037
2024-09-07T10:31:06.615042+08:00
Errors in file /u01/app/oracle/diag/rdbms/jiekxustd/jiekxu1/trace/jiekxu1_pr00_72131.trc:
ORA-16037: user requested cancel of managed recovery operation
2024-09-07T10:31:06.615930+08:00
.... (PID:67534): Managed Standby Recovery not using Real Time Apply
2024-09-07T10:31:06.631630+08:00
ARC2 (PID:68019): Archived Log entry 31860 added for T-1.S-2395893 ID 0x30a949 LAD:1
2024-09-07T10:31:07.105227+08:00
Recovery interrupted!
2024-09-07T10:31:07.434837+08:00


2024-09-07T10:31:07.434837+08:00
Reconfiguration started (old inc 6, new inc 8)
List of instances (total 2) :
 1 2
My inst 1
 Global Resource Directory frozen
 Communication channels reestablished
 Master broadcasted resource hash value bitmaps
 Non-local Process blocks cleaned out


--集群重配完成 14.9 secs


 LMS 2: 0 GCS shadows cancelled, 0 closed, 0 Xw survived, skipped 0
2024-09-07T10:31:09.020352+08:00
 Set master node info
 Dwn-cvts replayed, VALBLKs dubious
 All grantable enqueues granted
2024-09-07T10:31:22.306394+08:00
Reconfiguration complete (total time 14.9 secs)
2024-09-07T10:31:22.629666+08:00


--原备库 D 库自动重启实例到 mount ,角色变为主库


KZAUDIT: AUDIT_TRAIL initialization parameter is changed back to its original value as specified in the parameter file.
2024-09-07T10:31:37.534662+08:00
 rmi (PID:66252): Database role cleared from PHYSICAL STANDBY [kcvs.c:1134]
Enabling Dynamic Remastering: STNDB->NORM switch
Switchover: Complete - Database mounted as primary
TMI: kcv_commit_to_so_to_primary Switchover from physical END 2024-09-07 10:31:37.871995
SWITCHOVER: completed request from primary database.


---手动打开 D 库实例 1 和实例 2 alter database open 角色变为读写模式


2024-09-07T10:32:54.524217+08:00
alter database open
2024-09-07T10:32:54.524276+08:00
TMI: adbdrv open database BEGIN 2024-09-07 10:32:54.524242
2024-09-07T10:32:54.527109+08:00
idle dispatcher 'D000' terminated, pid = (67, 1)
2024-09-07T10:32:54.540899+08:00
This instance was first to open


2024-09-07T10:32:57.910622+08:00
CJQ0 started with pid=294, OS id=72255
Completed: alter database open

这样,整个 ADG Switchover 就完成了,过程如此丝滑,操作更丝滑。

切换完成后,我们需要在新主库上调整备库相关参数,以符合我们前面说的 D 库作为主库,A 库作为他的备库,原来的同城 B 库要作为 D 库的备库,异地灾备 C 库级联到 B 库,整体符合如下图示要求。

d8fe19f58f86e9c8477a0752d3a03088.png

--D 库


select open_mode,database_role from v$database;


alter system set log_archive_config='dg_config=(jiekxu,jiekxustd,jiekxuadg,jiekxudg)';
alter system set log_archive_dest_2='service=jiekxuadg ASYNC valid_for=(online_logfiles,primary_role) compression=enable db_unique_name=jiekxuadg';
alter system set log_archive_dest_3='service=jiekxu ASYNC valid_for=(online_logfiles,primary_role) compression=enable db_unique_name=jiekxu';


-- 启动service
srvctl start service -db jiekxustd -service jiekxu_data
srvctl start service -db jiekxustd -service jiekxu_etl

备库相关参数设置

--19c A库,目前为备库
startup
alter database recover managed standby database disconnect from session;
select open_mode,database_role from v$database;
select PROCESS,STATUS,THREAD#,SEQUENCE#,BLOCK#,BLOCKS FROM V$MANAGED_STANDBY;


--同城备库 B
alter system set log_archive_config=dg_config=(jiekxu,jiekxustd,jiekxuadg,jiekxudg);
alter system set log_archive_dest_2='service=jiekxustd ASYNC valid_for=(online_logfiles,primary_role) db_unique_name=jiekxustd';


select PROCESS,STATUS,THREAD#,SEQUENCE#,BLOCK#,BLOCKS FROM V$MANAGED_STANDBY;
select name,value,unit,time_computed from v$dataguard_stats where name in ('transport lag','apply lag');


ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
alter database flashback on;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
select NAME,LOG_MODE,VERSION_TIME,OPEN_MODE,FLASHBACK_ON from v$database;

除了以上参数设置外,还需要注意网络、防火墙、TNS 是否均已配置好,另外原主备互切后,db_file_name_convert 和 log_file_name_convert 参数以及 db_create_file_dest 参数是否正确,以防止新主库添加表空间和数据文件时无法同步到备库 B 或者级联备库 C,我这里就因为没有使用 OMF 置空了 db_create_file_dest 参数,主库发生切换 convert 参数又设置的不正确导致新增数据文件无法同步到级联备库。

无法传递数据文件到备库,则会导致 MRP0 进程挂掉,但是会在控制文件中记录 “$ORACLE_HOME/dbs/unknown” 这么一个文件,实际上 dbs 目录下也没有生成此文件。那么怎么处理呢?

还记得大概一年前的时间,有开发无意中 rm dbf 数据文件时的处理方案大同小异,如果还有没看到的戳这里查看,在 Oracle 归档模式下直接 rm dbf 数据文件并重启数据库还有救吗?本次问题发现的及时,还有归档日志保留了三四天,算是比较完整,处理起来也就比较顺手了。

--先取消 MRP0 进程
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;


show parameter standby_file_management
alter system set standby_file_management=MANUAL;


--执行此命令则可实际在 datafile 目录下创建原大小的数据文件
alter database create datafile '/u01/app/oracle/product/19.0.0/dbhome_1/dbs/unknown' as '/data/jiekexuadg/datafile/jiekexu_data08.dbf';


alter system set standby_file_management=AUTO;


--启动 MRP0 进程
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

这样第一个数据文件则就可以正常同步了,由于归档日志没有中断,convert 参数也调整了,后续的数据文件也能正常同步了,启动 MRP0 进程小半天的时间则已经正常同步了,完美收工!!!

参考链接

https://docs.oracle.com/en/database/oracle/oracle-database/23/sbydb/performing-oracle-data-guard-role-transitions.html#GUID-EEBC6DA6-E192-470E-8FC9-F507B004406E


https://docs.oracle.com/en/database/oracle/oracle-database/19/spmss/switchover-to-a-physical-db.html#GUID-AAD70601-D248-4309-B8DD-F461EE31A5FF

全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!

089156012e57c7ff871d16f88b97dd32.gif

分享几个数据库备份脚本

一文搞懂 Oracle 统计信息
 
 

我的 Oracle ACE 心路历程

MOP 系列|MOP 三种主流数据库索引简介

Oracle 主流版本不同架构下的静默安装指南
 
 

关机重启导致 ASM 磁盘丢失数据库无法启动

Oracle SQL 性能分析(SPA)原理与实战演练
 
 

Oracle 11g 升级到 19c 需要关注的几个问题

Windows 10 环境下 MySQL 8.0.33 安装指南

SQL 大全(四)|数据库迁移升级时常用 SQL 语句

OGG|使用 OGG19c 迁移 Oracle11g 到 19C(第二版)

Oracle 大数据量导出工具——sqluldr2 的安装与使用

从国产数据库调研报告中你都能了解哪些信息及我的总结建议

使用数据泵利用 rowid 分片导出导入 lob 大表及最佳实践

在归档模式下直接 rm dbf 数据文件并重启数据库还有救吗?

欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
——————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
——————————————————————————2abb2260f5ea0ebaf44078d463391de4.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值