dataguard 主备切换方式switchover 和 failover 操作步骤

news2024/10/7 8:19:50
作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG数据库运维(如安装迁移,性能优化、故障应急处理等)
公众号:老苏畅谈运维
欢迎关注本人公众号,更多精彩与您分享。

dataguard 切换方式有两种方式:switchover 和 failover。
(1)Switchover :无损转换,通常是用户手动触发或者有计划的让其自动触发,比如硬件升级、软件升级之类的。switchover是有计划的,正常的切换,不会破坏数据库DG关系。
通常它给你带来的工作量非常小并且都是可预计的。其执行分两个阶段,第一步,primary 数据库转换为standby 角色,第二步,standby 数据库转换为 primary 角色,primary 和 standby 只是简单的角色互换。

  • 切换过程:主库->切换->备库->检查状态->原备库->切换->主库->再检查状态
  • 应用场合:主库需要调整升级,主库性能不佳,这时可以切换后用新主库对外提供服务
  • 是否丢失数据:不会丢失数据

(2)Failover :不可预知原因导致 primary 数据库故障并且短期内不能恢复就需要 failover,failover是非计划的,破坏性的切换,切换之后要重建DG。
所谓failover,它是一种丢弃切换,直接把备库切换成主库,原主库自动丢弃,也就是不在属于DG架构的一部分了。

  • 切换过程:备库->切换->主库->检查状态,原主库脱离DG架构
  • 是否丢失数据:极有可能丢失数据,我们的目标就是损失降到最低
  • 如果在failure之前是maximum protection or maximum availability模式,会丢失数据
  • 挽救措施:重建主库使用原来备份恢复主库

一、Switchover操作步骤

大致步骤为主库先转换为备库,在此阶段可能看到原先的主备皆为备库状态,然后再将原备库设置为主库

1.主库操作

注意事项:

  • 生产环境切换时间会长,考虑执行alter system flush buffer_cache,将内存数据刷到磁盘
  • 写检查点alter system checkpoint
  • 考虑先关闭应用,无用户连接可以减少切换的时间

–检查是否已经添加standby redo log
–standby redo log数量应等于redo数量 +1
select * from v$standby_log

–检查主库状态
–SWITCHOVER_STATUS转换状态:to standby和session active(有会话连接),这两种状态可以转换
select name,open_mode, database_role, switchover_status, force_logging, dataguard_broker, guard_status from v$database;

–检查主备之间是否有GAP
–dest_id:1主库 2备库
select STATUS, GAP_STATUS from v$archive_dest_status t where DEST_ID = 2;

–swithover切换(主库执行完毕实例会自动关闭)
alter database commit to switchover to physical standby;

–当有会话连接的情况下,执行上面命令会失败,需要用这一条
alter database commit to switchover to physical standby with session shutdown;

–启动数据库
startup;

–检查当前数据库状态,此时应看到已经是read only,且是PHYSICAL STANDBY状态
select open_mode,database_role from v$database;

–开启实时应用
alter database recover managed standby database using current logfile disconnect;

2.备库操作

–检查状态
–同主库一样,SWITCHOVER_STATUS是to primary或session active就可以切换
select name,open_mode, database_role, switchover_status, force_logging, dataguard_broker, guard_status from v$database;

–执行切换(执行后为mounted状态)
alter database commit to switchover to primary;

alter database commit to switchover to primary with session shutdown;

–打开数据库
alter database open;

3.测试同步

测试主备切换的数据同步情况。

二、Failover操作步骤

注意事项:
1.failover操作之后,会自动丢弃原主库不在是DG一部分
2.如果你有多个备库,其他备库也会自动脱离DG,也不需要做shutdown 和 restart 动作。当有了新主库之后可以根据需要重新创建所有备库
3.我们推荐使用命令行的方式进行failover操作
4.不能在备库接收日志情况下进行failover操作
5.如果你的备库是在maximum protection mode or maximum availability mode并且使用LGWR方式传送日志,那么归档日志号是不会有缺口的必须是连续的,
这时可以直接停止接收日志,马上进行failover切换
6.在进行切换之前检查归档日志号不能有缺口gap

操作步骤:

1.如果备库是maximum protection 必须先修改成maximum performance之后才能切换
修改语句:Alter database set standby database to maximize performance;
注:切换之后你可以在改回maximum protection mode

2.如果主库与备库之间有日志传输的话,如上语句修改备库从maximum protection->maximum performance不会成功的。因为failover操作会删除原主库的DG配置,这也是为了保护主库操作。

3.检查备库归档日志号是否都是连续的,不能有缺口,否则需要补救,可以检查VKaTeX parse error: Expected 'EOF', got '#' at position 38: …口 SELECT THREAD#̲, LOW_SEQUENCE#…ARCHIVE_GAP;
如果备库归档日志号是连续的,就不用在拷贝归档日志了

如下面的:
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
THREAD#LOW_SEQUENCE# HIGH_SEQUENCE#


1 90 92

说明缺少90、91、92号归档日志,可以从主库->copy->备库,必须保证归档日志齐全,否则会在failover时导致数据丢失

加载copy归档日志信息至控制文件
ALTER DATABASE REGISTER PHYSICAL LOGFILE ‘filespec1’;

对比主备库归档日志列表的完整性
select sequence#,ARCHIVED,APPLIED from v$archived_log;主库归档日志列表

–停止备库日志应用
alter database recover managed standby database cancel;

–关闭备库的日志传输,备库会置于mount状态。
alter database recover managed standby database finish force;

force关键字:终止了RFS进程,以便停止接收日志
finish关键字:后面还可以跟随FORCE WAIT NOWAIT

–若主备之间有gap的情况下,使用上一条语句可能会不成功,则需要执行这条语句
alter database active physical standby database;

–切换到primary
alter database commit to switchover to primary with session shutdown;

–重启数据库
shutdown immediate;
startup;

–查询数据库状态
select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE


READ WRITE PRIMARY

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1866190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

modelsim做后仿真的一点思路

这是以TD_5.6.3_Release_88061生成的网表文件(其他工具生成的网表文件类似),与modelsim联合进行门级仿真的样例,时序仿真与门级仿真的方法类似,只是增加了标准延时文件。 1、建立门级仿真工程 将门级网表和testbench添…

【Linux】线程Thread

🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ ​ 线程概述 …

ROS学习(17):定位和地图绘制(1)

目录 0.前言 1.定位和建图 1.里程计(Odometry) 2.扫描匹配(Scan Matching) 3.结尾 0.前言 好久不见各位,前段时间忙着考试(6级和一些专业课)和摆烂断更了近30天,现在哥们回来更…

【移动应用开发期末复习】第五/六章

系列文章 第一章——Android平台概述 第一章例题 第二章——Android开发环境 第二章例题 第三章 第三章例题 第四章 系列文章界面布局设计线性布局表格布局帧布局相对布局约束布局控制视图界面的其他方法代码控制视图界面数据存储与共享首选项信息数据文件SQLite数据库Content…

【Linux】锁|死锁|生产者消费者模型

🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ ​ 访问互斥 …

VOC格式转YOLO格式,xml文件转txt文件简单通用代码

目录 前言 思路介绍 代码 完整代码 拓展代码 前言 很多人在进行目标检测训练时习惯将得到的数据标注为XML文件的VOC格式,或者在网上获取的数据集被标注为XML文件,但是不同的标注工具进行的标注会产生不同的标注xml文件,这里我写了一种通用…

Ruby langchainrb gem and custom configuration for the model setup

题意:Ruby 的 langchainrb gem 以及针对模型设置的自定义配置 问题背景: I am working in a prototype using the gem langchainrb. I am using the module assistant module to implemente a basic RAG architecture. 我正在使用 langchainrb 这个 ge…

初识Java(二)

初识Java的main方法 1.1 main方法示例 public class world {public static void main(String[] args) {System.out.println("hello,world!");}}通过上述代码,我们可以看到一个完整的Java程序的结构,Java程序的结构由如下三个部分组成&#x…

标签接口开发(富含完整CRUD开发流程)

文章目录 1.easyCode生成CRUD1.生成代码2.查看代码3.调整代码1.SubjectLabelDao.xml发现生成的select语句不带逗号!!!1.解决方法:2.entity.java.vm3.dao.java.vm4.Mapper.xml.vm 2.重新生成代码3.SubjectLabelDao.java 删除Pageab…

11-Django项目--Ajax请求二

目录 模版: demo_list.html perform_list.html 数据库操作: 路由: 视图函数: Ajax_data.py perform.py 模版: demo_list.html {% extends "index/index.html" %} {% load static %} # 未实现修改,删除操作{% block content %}<div class"container…

nacos在k8s上的集群安装实践

目录 概述实践nfs安装使用 k8s持久化nacos安装创建角色部署数据库执行数据库初始化语句部署nacos ingress效果展示 结束 概述 本文主要对 nacos 在k8s上的集群安装 进行说明与实践。主要版本信息&#xff0c;k8s: 1.27.x&#xff0c;nacos: 2.0.3。运行环境为 centos 7.x。 实…

江协科技51单片机学习- p19 串口通信

前言&#xff1a; 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记&#xff0c;在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用&#xff1a; 51单片机入门教程-2…

力扣:59. 螺旋矩阵 II(Java,模拟)

目录 题目描述示例 1&#xff1a;代码实现 题目描述 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5…

node mySql 实现数据的导入导出,以及导入批量插入的sql语句

node 实现导出, 在导出excel中包含图片&#xff08;附件&#xff09; node 实现导出, 在导出excel中包含图片&#xff08;附件&#xff09;-CSDN博客https://blog.csdn.net/snows_l/article/details/139999392?spm1001.2014.3001.5502 一、效果 如图&#xff1a; 二、导入 …

此消彼长之间,国货品牌如何“进化”?

2024年&#xff0c;国内运动鞋服行业各品牌的股价集体回暖。年初至今&#xff08;1月2日至6月26日&#xff09;&#xff0c;港股的四大运动品牌中&#xff0c;361度涨幅达30.55%&#xff0c;特步上涨19.1%&#xff0c;安踏上涨7.75%&#xff0c;而李宁与美股市场的耐克组成了“…

【ARM】内存属性Memory Attributes (MemAttr)

目录 1. EWA 2. Device 3. Cacheable 4. Allocate 5. 内存属性的传播 6. 事务属性组合 7. Memory Type 内存属性Memory Attributes (MemAttr) 包含Early Write Acknowledgment (EWA), Device, Cacheable, 以及Allocate。 1. EWA EWA&#xff0c;Early Write Acknowledg…

Java进阶-Lambda

Java进阶-Lambda 前言Lambda表达式什么是Lambda表达式初识Lambda表达式Lambda表达式的简单使用Lambda表达式格式分析与传统接口方法实现的比较 理解Lambda表达式函数式编程非纯函数实例纯函数示例函数式编程在Lambda表达式中的体现 闭包闭包与Lambda表达式的示例 类型推导-匿名…

裸机与操做系统区别(RTOS)

声明&#xff1a;该系列笔记是参考韦东山老师的视频&#xff0c;链接放在最后&#xff01;&#xff01;&#xff01; rtos&#xff1a;这种系统只实现了内核功能&#xff0c;比较简单&#xff0c;在嵌入式开发中&#xff0c;某些情况下我们只需要多任务&#xff0c;而不需要文件…

【插件】IDEA这款插件Key Promoter X,爱到无法自拔

文章目录 为什么选择Key Promoter X&#xff1f;1. 提升开发效率2. 友好的学习曲线3. 可定制性强 安装和配置Key Promoter X1. 安装插件2. 配置插件 使用Key Promoter X个人使用体验1. 快捷键记忆2. 定制化功能3. 整体体验提升 总结 &#x1f389;欢迎来到Java学习路线专栏~探索…

Excel中的“点选输入”——次级下拉列表创建

在Excel中&#xff0c;用“数据验证”功能可以设置下拉列表&#xff0c;二级下拉列表需要设置公式。 (笔记模板由python脚本于2024年06月16日 18:36:37创建&#xff0c;本篇笔记适合经常使用Excel处理数据的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;http…