Oracle一对多(一主多备)的DG环境如何进行switchover切换?
本文主要分享Oracle一对多(一主多备)的DG环境的switchover切换,如何进行主从切换,切换后怎么恢复正常同步?
1、环境说明
本文的环境为一主两备,数据库版本为11.2.0.4,主要信息如下:
| 数据库IP | db_unique_name | 原角色(切换前) | 目标角色(切换后) |
|---|---|---|---|
| 10.10.10.160 | ora11g | 主库 | 备库 |
| 10.10.10.41 | dgora11g | 备库 | 主库 |
| 10.10.10.47 | sbora11g | 备库 | 备库 |
说明:
(1)当前主库为10.10.10.160,10.10.10.41 和10.10.10.47是它的两个备库。
(2)switchover切换后,10.10.10.41变为主库,10.10.10.160和10.10.10.47成为它的两个备库。
2、主要参数配置
以下是相关数据库的主要参数配置信息(以db_unique_name进行区分):
ora11g:
set linesize 500 pages 0
col value for a100
col name for a50
select name, value
from v$parameter
where name in ('db_name','db_unique_name',
'log_archive_config',
'log_archive_dest_1','log_archive_dest_2',
'log_archive_dest_state_1',
'log_archive_dest_state_2',
'remote_login_passwordfile',
'log_archive_format',
'log_archive_max_processes',
'fal_server','db_file_name_convert',
'log_file_name_convert',
'standby_file_management')
/db_file_name_convert /u01/oradata/dgora11g, /u01/oradata/ora11g, /u01/oradata/sbora11g, /u01/oradata/ora11g
log_file_name_convert /u01/oradata/dgora11g, /u01/oradata/ora11g, /u01/oradata/sbora11g, /u01/oradata/ora11g
log_archive_dest_1 location=/u01/oradata/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) db_unique_name=ora11g
log_archive_dest_2 SERVICE=dgora11g LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=dgora11g
log_archive_dest_state_1 ENABLE
log_archive_dest_state_2 ENABLE
fal_server dgora11g, sbora11g
log_archive_config DG_CONFIG=(ora11g,dgora11g,sbora11g)
log_archive_format %t_%s_%r.dbf
log_archive_max_processes 4
standby_file_management AUTO
remote_login_passwordfile EXCLUSIVE
db_name ora11g
db_unique_name ora11g
dgora11g:
db_file_name_convert /u01/oradata/ora11g, /u01/oradata/dgora11g
log_file_name_convert /u01/oradata/ora11g, /u01/oradata/dgora11g
log_archive_dest_1 location=/u01/oradata/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) db_unique_name=dgora11g
log_archive_dest_2 SERVICE=ora11g LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ora11g
log_archive_dest_state_1 ENABLE
log_archive_dest_state_2 ENABLE
fal_server ora11g
log_archive_config DG_CONFIG=(ora11g,dgora11g)
log_archive_format %t_%s_%r.dbf
log_archive_max_processes 4
standby_file_management AUTO
remote_login_passwordfile EXCLUSIVE
db_name ora11g
db_unique_name dgora11g
sbora11g:
db_file_name_convert /u01/oradata/ora11g, /u01/oradata/sbora11g
log_file_name_convert /u01/oradata/ora11g, /u01/oradata/sbora11g
log_archive_dest_1 location=/u01/oradata/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) db_unique_name=sbora11g
log_archive_dest_2 SERVICE=ora11g LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ora11g
log_archive_dest_state_1 ENABLE
log_archive_dest_state_2 ENABLE
fal_server ora11g
log_archive_config DG_CONFIG=(ora11g,sbora11g)
log_archive_format %t_%s_%r.dbf
log_archive_max_processes 4
standby_file_management AUTO
remote_login_passwordfile EXCLUSIVE
db_name ora11g
db_unique_name sbora11g
3、切换前检查
切换前,确认备库同步情况,有没有延迟
dgora11g:
sys@dgora11g> select value from v$dataguard_stats where name='transport lag';VALUE
----------------------------------------------------------------
+00 00:00:00sys@dgora11g> select value from v$dataguard_stats where name='apply lag'; VALUE
----------------------------------------------------------------
+00 00:00:00--检查最新归档到的日志号及是否有gapsys@dgora11g> SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;THREAD LAST
---------- ----------1 289sys@dgora11g> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;no rows selected
sbora11g:
sys@sbora11g > select value from v$dataguard_stats where name='transport lag';VALUE
----------------------------------------------------------------
+00 00:00:00sys@sbora11g > select value from v$dataguard_stats where name='apply lag';VALUE
----------------------------------------------------------------
+00 00:00:00
sys@sbora11g > SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;THREAD LAST
---------- ----------1 289sys@sbora11g > SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;no rows selected
检查确认两个备库实时同步,没有延时后,才能切换。
4、switchover切换
在切换时,在主库上是不可以选择我要切换到哪个备库的,这个选择是在备库上选择的,下面进行SWITCHOVER切换。
–主库状态
sys@ora11g> col name for a10;
sys@ora11g> set linesize 100;
sys@ora11g> select name,open_mode, database_role, switchover_status, force_logging, dataguard_broker, guard_status from v$database;NAME OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS FOR DATAGUAR GUARD_S
---------- -------------------- ---------------- -------------------- --- -------- -------
ORA11G READ WRITE PRIMARY TO STANDBY YES DISABLED NONE
–备库状态
dgora11g:
sys@dgora11g> col name for a10;
sys@dgora11g> set linesize 100;
sys@dgora11g> select name,open_mode, database_role, switchover_status, force_logging, dataguard_broker, guard_status from v$database;NAME OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS FOR DATAGUAR GUARD_S
---------- -------------------- ---------------- -------------------- --- -------- -------
ORA11G MOUNTED PHYSICAL STANDBY NOT ALLOWED YES DISABLED NONE
sbora11g:
sys@sbora11g > col name for a10;
sys@sbora11g > set linesize 100;
sys@sbora11g > select name,open_mode, database_role, switchover_status, force_logging, dataguard_broker, guard_status from v$database;NAME OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS FOR DATAGUAR GUARD_S
---------- -------------------- ---------------- -------------------- --- -------- -------
ORA11G MOUNTED PHYSICAL STANDBY NOT ALLOWED YES DISABLED NONE
–将主库转为物理备库
ora11g:
alter database commit to switchover to physical standby with session shutdown;
切换后,这个数据库已经备关闭,启动数据库,这个数据库已经变为备库,启动MRP进程。
sys@ora11g> startup;
ORACLE instance started.Total System Global Area 3691200512 bytes
Fixed Size 2258680 bytes
Variable Size 1392511240 bytes
Database Buffers 2281701376 bytes
Redo Buffers 14729216 bytes
Database mounted.
Database opened.
sys@ora11g> alter database recover managed standby database using current logfile disconnect from session;Database altered.或 alter database recover managed standby database using current logfile disconnect from session parallel 4; --检查状态,可以看到已变为从库
sys@ora11g> select name,open_mode, database_role, switchover_status, force_logging, dataguard_broker, guard_status from v$database;NAME OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS FOR DATAGUAR GUARD_S
---------- -------------------- ---------------- -------------------- --- -------- -------
ORA11G READ ONLY WITH APPLY PHYSICAL STANDBY TO PRIMARY YES DISABLED NONE
PS:主库切换后,两个备库均变为TO PRIMARY状态,这时就要选择切换哪个备库为主库了。
dgora11g:
sys@dgora11g> col name for a10;
sys@dgora11g> set linesize 100;
sys@dgora11g> select name,open_mode, database_role, switchover_status, force_logging, dataguard_broker, guard_status from v$database;NAME OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS FOR DATAGUAR GUARD_S
---------- -------------------- ---------------- -------------------- --- -------- -------
ORA11G MOUNTED PHYSICAL STANDBY TO PRIMARY YES DISABLED NONE

sbora11g:
sys@sbora11g > col name for a10;
sys@sbora11g > set linesize 100;
sys@sbora11g > select name,open_mode, database_role, switchover_status, force_logging, dataguard_broker, guard_status from v$database;NAME OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS FOR DATAGUAR GUARD_S
---------- -------------------- ---------------- -------------------- --- -------- -------
ORA11G MOUNTED PHYSICAL STANDBY TO PRIMARY YES DISABLED NONE

–备库切换成主库
这里选择sbora11g这个备库切换为主库:
sys@sbora11g > alter database commit to switchover to primary with session shutdown;Database altered.sys@sbora11g > alter database open;Database altered.sys@sbora11g > select name,open_mode, database_role, switchover_status, force_logging, dataguard_broker, guard_status from v$database;NAME OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS FOR DATAGUAR GUARD_S
---------- -------------------- ---------------- -------------------- --- -------- -------
ORA11G READ WRITE PRIMARY TO STANDBY YES DISABLED NONE
5、新主库参数调整
log_archive_config、log_archive_dest_3还需加上从库dgora11g
sys@sbora11g > show parameter archive;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target integer 0
log_archive_config string DG_CONFIG=(ora11g,sbora11g)
log_archive_dest string
log_archive_dest_1 string location=/u01/oradata/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) db_unique_name=sbora11g
log_archive_dest_10 string
log_archive_dest_11 string
log_archive_dest_12 string
log_archive_dest_13 string
log_archive_dest_14 string
log_archive_dest_15 string
log_archive_dest_16 string
log_archive_dest_17 string
log_archive_dest_18 string
log_archive_dest_19 string
log_archive_dest_2 string SERVICE=ora11g LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=ora11g
............................................
log_archive_dest_3 string--log_archive_config 需将三节点都加上
alter system set log_archive_config='DG_CONFIG=(sbora11g,ora11g,dgora11g)' scope=both sid='*';
alter system set log_archive_dest_3='SERVICE=dgora11g LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=dgora11g' scope=both sid='*';
alter system set fal_server='ora11g','dgora11g' scope=both sid='*';
alter system set log_archive_dest_state_3=defer scope=both sid='*';
alter system set log_archive_dest_state_3=enable scope=both sid='*';
6、备库参数调整
–log_archive_config 若未设置,需将三节点都加上
--log_archive_config需将三节点都加上
--dgora11g 修改目标主库为sbora11g
sys@dgora11g> show parameter config;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dg_broker_config_file1 string /u01/app/oracle/product/11.2.0/db/dbs/dr1dgora11g.dat
dg_broker_config_file2 string /u01/app/oracle/product/11.2.0/db/dbs/dr2dgora11g.dat
log_archive_config string DG_CONFIG=(ora11g,dgora11g)
sys@dgora11g> alter system set log_archive_config='DG_CONFIG=(sbora11g,ora11g,dgora11g)' scope=both sid='*';System altered.--因为dgora11g这个数据库之前的主是ora11g(现在已经变成了备库),需要把dgora11g的主改成sbora11g。alter system set log_archive_dest_2='SERVICE=sbora11g LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=sbora11g' scope=both sid='*';alter system set FAL_SERVER='ora11g','sbora11g';若新的主库不在备库的DG_CONFIG配置里,主库会报错:
ARC3: Archivelog destination LOG_ARCHIVE_DEST_3 disabled: destination Data Guard configuration error
Archived Log entry 29 added for thread 1 sequence 300 ID 0x108ef4ac dest 1:
Fri Aug 09 20:16:12 2024
LNS: Standby redo logfile selected for thread 1 sequence 301 for destination LOG_ARCHIVE_DEST_2--ora11g备库已经配置,不用修改
sys@ora11g> show parameter log_archive_config;NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_config string DG_CONFIG=(ora11g,dgora11g,sbora11g)
7、切换后验证
–主库插入测试数据
sys@sbora11g > create table tt0809 as select * from dba_objects;Table created.
–两备库查询
sys@ora11g> select count(*) from tt0809;COUNT(*)
----------86266
sys@dgora11g> select count(*) from tt0809; COUNT(*)
----------86266
至此主从切换已完成,新主库应与两从库正常同步
关注我,学习更多的数据库知识

相关文章:
Oracle一对多(一主多备)的DG环境如何进行switchover切换?
本文主要分享Oracle一对多(一主多备)的DG环境的switchover切换,如何进行主从切换,切换后怎么恢复正常同步? 1、环境说明 本文的环境为一主两备,数据库版本为11.2.0.4,主要信息如下: 数据库IPdb_unique_n…...
【浏览器插件】Chrome扩展V3版本
前言:Chrome从2022年6月开始,新发布插件只接受V3版。2024年V2版已从应用商店下架。 浏览器扩展插件开发API文档 chrome官网(要翻墙): https://developer.chrome.com/docs/extensions/mv3 MDN中文:https:/…...
编码器信号干扰问题、编码器选型
系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言一、屏蔽技术1.静电屏蔽:2.低频磁屏蔽:3.电磁屏蔽:4.减少“天线” 二、增量编码器的信号选择三、信号电缆选择四、…...
Unity入门5——材质
创建材质 点击Assets → Create → Material,得到一个默认材质球的副本。 使用材质 直接把材质球拖拽到物体上,或设置mesh renderer组件下的Materials 数组中第一个元素...
C的温故而知新:存储类别、链接和内存管理(C Primer Plus第十二章)
存储类别、链接和内存管理 这一章主要涉及到的是一些偏概念的东西,基本上偏向于自己去理解这部分内容。很好地理解这一章可以更好地控制程序,合理的利用内存存储数据。 C语言提供了多种不同的模型或存储类别在内存中存储数据。作用域有块作用域、函数作…...
SpringBoot统一功能处理——统一数据返回格式
目录 一、简单使用 二、存在的问题描述 三、优点 一、简单使用 统一的数据返回格式使用 ControllerAdvice 和 ResponseBodyAdvice 的方式实现 ControllerAdvice 表示控制器通知类。 添加类 ResponseAdvice , 实现 ResponseBodyAdvice 接口,并在类上添加 …...
Milvus 实践(2) --- 2.4.x 安装,脚本分析,数据存储解析
目录 背景 Milvus2.4.x安装脚本分析 etcd组件 container_name image 参数 注意问题 environment volumes 实体化 command 参数 注意事项 healthcheck 参数 作用 下载 minio组件 container_name image 参数 注意事项 environment 参数 ports 参数 注…...
【蛋疼c++】千万别用std::wifstream读取Unicode UTF16文件
上当了。 最近程序要和 Jscript / activex 脚本通信。 ActiveX这玩意,导出文件,如果是UTF8导出,会出现莫名异常:写一半直接退出。或许是系统语言设置的问题。 但是切换为utf16(unicode)导出就没有问题&a…...
[算法] 第二集 二叉树中的深度搜索
深度优先遍历(DFS,全称为 Depth First Traversal),是我们树或者图这样的数据结构中常⽤的 ⼀种遍历算法。这个算法会尽可能深的搜索树或者图的分支,直到⼀条路径上的所有节点都被遍历 完毕,然后再回溯到上…...
放弃使用外键时,sequelize 应该怎么使用?
在使用 Sequelize 时,如果想放弃使用外键,但仍然希望在模型之间建立关联,可以通过设置 constraints 选项为 false 来实现。这允许你定义模型之间的关系,而不在数据库中创建外键约束。以下是具体的实现步骤: 定义没有外…...
Microsoft GraphRAG 输出的配置信息
Microsoft GraphRAG 输出的配置信息 {"llm": {"api_key": "REDACTED, length 9","type": "oci_genai_chat","model": "cohere.command-r-plus","max_tokens": 4000,"temperature"…...
怎么判断张量的维度(形状(shape)),即如何定义行数、列数和深度的?
举一个三维张量吧 # 3行4列深度为2 const3 tf.constant([[[1,2],[3,4],[5,6],[7,8]],[[11, 12], [13, 14], [15, 16], [17, 18]],[[21, 22], [23, 24], [25, 26], [27, 28]] ],tf.float16) shape (3,4,2)--借鉴博主奶油松果的图和代码 分析形状 (3, 4, 2) 最外层的括号&…...
AI入门指南(二):算法、训练、模型、大模型是什么?
文章目录 一、前言二、算法是什么?概念实际应用 三、训练是什么?概念实际应用 四、模型是什么?概念实际应用小结 五、大模型是什么?概念大模型和小模型有什么区别?大模型分类实际应用 六、总结七、参考资料 一、前言 …...
CSS已访问链接的隐私保护
摘抄自:《CSS权威指南 第四版》 有超过十年的时间,已访问的链接可以使用任何可用的CSS属性装饰,与未访问链接没有差别。 然而,大约在2005年,有几个人通过示例揭露,通过视觉样式和简单的DOM脚本就可以判断用…...
代码练习12-排序链表
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 归并排序算法核心步骤 归并排序核心步骤如下: 把长度为n的要排序的序列,分成两个长度为n/2的子序列;对这两个子序列,分别采用归并排序;…...
Linux 内核源码分析---套接字
套接字通信 ISO 设计一种参考模型,定义组成网络的各个层,该模型由7层组成,称为OSI(开放 系统互连)模型如下: 应用层:网络服务与最终用户的接口; 表示层:数据的表示、安…...
vscode配置xdebug断点调试详细教程
注:环境为本地windows开发环境,编辑器为vscode,PHP集成环境工具为EServer vscode安装扩展并配置 安装PHP Debug 扩展中搜索 PHP Debug 并安装: 配置PHP Debug 1、点击扩展设置 2、在设置中,点击 setting.json 3、编…...
【人工智能】Transformers之Pipeline(八):文生图/图生图(text-to-image/image-to-image)
目录 一、引言 二、文生图/图生图(text-to-image/image-to-image) 2.1 文生图 2.2 图生图 2.3 技术原理 2.3.1 Diffusion扩散模型原理 2.3.2 Stable Diffusion扩散模型原理 2.4 文生图实战 2.4.1 SDXL 1.0 2.4.2 SD 2.0 2.5 模型排名 三、总…...
AI Agent 工程师认证-学习笔记(1)——【单Agent】ModelScope-Agent
学习链接: 【单Agent】ModelScope-Agent学习指南https://datawhaler.feishu.cn/wiki/GhOLwvAPkiSWmokjUgqc1eGonDf 手把手Agent开发开源教程(觉得不错的话可以star一下)https://github.com/datawhalechina/agent-tutorial 动手学Agent应用…...
【Python机器学习】树回归——将CART算法用于回归
要对数据的复杂关系建模,可以借用树结构来帮助切分数据,如何实现数据的切分?怎样才能知道是否已经充分切分?这些问题的答案取决于叶节点的建模方式。回归树假设叶节点是常数值,这种策略认为数据中的复杂关系可以用树结…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
StarRocks 全面向量化执行引擎深度解析
StarRocks 全面向量化执行引擎深度解析 StarRocks 的向量化执行引擎是其高性能的核心设计,相比传统行式处理引擎(如MySQL),性能可提升 5-10倍。以下是分层拆解: 1. 向量化 vs 传统行式处理 维度行式处理向量化处理数…...
手动给中文分词和 直接用神经网络RNN做有什么区别
手动分词和基于神经网络(如 RNN)的自动分词在原理、实现方式和效果上有显著差异,以下是核心对比: 1. 实现原理对比 对比维度手动分词(规则 / 词典驱动)神经网络 RNN 分词(数据驱动)…...
