由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程

由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程

在上一篇文章中,由于 Oracle 数据库的归档日志空间耗尽导致客户端无法连接数据库。在解决的过程中临时修改了归档路径。后来通过修改参数db_recovery_file_dest_size的值解决了问题。
但该操作导致DG无法与主库同步。本文给出了该问题的解决思路与方法。

使用如下两条命令开启数据库同步:

alter database recover managed standby database cancel;  -- 停止同步
alter database recover managed standby database using current logfile disconnect from session;  -- 开启同步

查看主库的进程:

SQL> select process, status, sequence# from v$managed_standby;PROCESS   STATUS	SEQUENCE#
--------- ------------ ----------
ARCH	  CLOSING	   116083
ARCH	  OPENING	   116057
ARCH	  CLOSING	   116085
ARCH	  CLOSING	   116053
LNS	  WRITING	   116086

查看备库的进程:

SQL> select process, status, sequence# from v$managed_standby;PROCESS   STATUS	SEQUENCE#
--------- ------------ ----------
ARCH	  CLOSING	   116085
ARCH	  CLOSING	   325777
ARCH	  CONNECTED		0
ARCH	  CLOSING	   325778
MRP0	  APPLYING_LOG	   325395
RFS	  IDLE			0
RFS	  IDLE			0
RFS	  IDLE		   116086
RFS	  IDLE			0
RFS	  IDLE			0
RFS	  IDLE			0
RFS	  IDLE		   32577912 rows selected.

发现主库的进行和备库的进程大都是正常的,但是 MRP0SEQUENCE#RFSSEQUENCE#差异较大。在主库中写入数据,发现不能同步。比如在主库的表中添加数据,才从库中查询不到。在主库上多次执行alter system switch logfile;命令切换日志,问题仍然不能解决。

由于时间太晚,操作暂停。

==========================================================================================

第二天(7月27日)上午十点,远程连接服务器查看备库的进程。

==========================================================================================

发现了下列异常(MRP0进程的状态变成了WAIT_FOR_GAP):

SQL> select process, status, sequence# from v$managed_standby;PROCESS   STATUS	SEQUENCE#
--------- ------------ ----------
ARCH	  CLOSING	   325842
ARCH	  CLOSING	   325843
ARCH	  CONNECTED		0
ARCH	  CLOSING	   116143
RFS	  IDLE			0
RFS	  IDLE			0
RFS	  IDLE			0
RFS	  IDLE			0
RFS	  IDLE		   116144
RFS	  IDLE			0
MRP0	  WAIT_FOR_GAP	   116056
RFS	  IDLE			0
RFS	  IDLE		   32584413 rows selected.

查询 GAP 信息如下:缺少两个归档文件(对应的SEQUENCE#分别为 116056-116057

SQL> SELECT * FROM V$ARCHIVE_GAP;THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------2	  116056	 116057

基本可以确定昨晚备库无法同步的原因:

因为昨天修改了归档的地址,导致修改归档地址之后生成的归档文件没有被传送到备库中,备库无法接收到这些归档文件,导致备库的数据确实,备库和主库不一致,导致无法同步。

解决方法如下:

步骤1:进入到主库中(节点1和节点2同时操作)修改后的归档地址,把归档日志文件复制到 DG备库的归档目录中。

结果如下:

[oracle@dghisdb:/archive/DGHISDB/archivelog]$ll
total 4056012
-rw-r----- 1 oracle oinstall  16284160 Jul 26 22:33 1_325744_1109379972.dbf
-rw-r----- 1 oracle oinstall  34625024 Jul 26 22:33 1_325745_1109379972.dbf
-rw-r----- 1 oracle oinstall 351205888 Jul 26 22:33 1_325746_1109379972.dbf
-rw-r----- 1 oracle oinstall 148878848 Jul 26 22:33 1_325747_1109379972.dbf
-rw-r----- 1 oracle oinstall 803595776 Jul 26 22:33 1_325748_1109379972.dbf
-rw-r----- 1 oracle oinstall 426488320 Jul 26 22:33 1_325749_1109379972.dbf
-rw-r----- 1 oracle oinstall     45056 Jul 26 22:33 1_325750_1109379972.dbf
-rw-r----- 1 oracle oinstall    115200 Jul 26 22:33 1_325751_1109379972.dbf
-rw-r----- 1 oracle oinstall  10448384 Jul 26 22:33 1_325752_1109379972.dbf
-rw-r----- 1 oracle oinstall   1524736 Jul 26 22:33 1_325753_1109379972.dbf
-rw-r----- 1 oracle oinstall   1793024 Jul 26 22:33 1_325754_1109379972.dbf
-rw-r----- 1 oracle oinstall     14848 Jul 26 22:33 1_325755_1109379972.dbf
-rw-r----- 1 oracle oinstall   1974784 Jul 26 22:33 1_325756_1109379972.dbf
-rw-r----- 1 oracle oinstall      5120 Jul 26 22:33 1_325757_1109379972.dbf
-rw-r----- 1 oracle oinstall  16760832 Jul 26 22:33 1_325758_1109379972.dbf
-rw-r----- 1 oracle oinstall 734867968 Jul 26 22:33 2_116052_1109379972.dbf
-rw-r----- 1 oracle oinstall 387082752 Jul 26 22:33 2_116054_1109379972.dbf
-rw-r----- 1 oracle oinstall      1024 Jul 26 22:33 2_116055_1109379972.dbf
-rw-r----- 1 oracle oinstall 803034112 Jul 26 22:35 2_116056_1109379972.dbf
-rw-r----- 1 oracle oinstall 260406272 Jul 26 22:35 2_116057_1109379972.dbf
-rw-r----- 1 oracle oinstall    107520 Jul 26 22:35 2_116058_1109379972.dbf
-rw-r----- 1 oracle oinstall 111630848 Jul 26 22:35 2_116059_1109379972.dbf
-rw-r----- 1 oracle oinstall   2964992 Jul 26 22:35 2_116060_1109379972.dbf
-rw-r----- 1 oracle oinstall  32430080 Jul 26 22:35 2_116061_1109379972.dbf
-rw-r----- 1 oracle oinstall    209408 Jul 26 22:35 2_116062_1109379972.dbf
-rw-r----- 1 oracle oinstall   6656512 Jul 26 22:35 2_116063_1109379972.dbf
.......

步骤2:在备库上注册archive log,对应的文件为:2_116056_1109379972.dbf2_116057_1109379972.dbf

-rw-r----- 1 oracle oinstall 803034112 Jul 26 22:35 2_116056_1109379972.dbf
-rw-r----- 1 oracle oinstall 260406272 Jul 26 22:35 2_116057_1109379972.dbf

执行如下命令注册archive log

alter database register logfile '/archive/DGHISDB/archivelog/2_116056_1109379972.dbf';
alter database register logfile '/archive/DGHISDB/archivelog/2_116057_1109379972.dbf';

步骤3:执行注册日志的命令后重启数据库同步。

alter database recover managed standby database cancel;  -- 停止同步
alter database recover managed standby database using current logfile disconnect from session;  -- 开启同步

然后重新查看备库的进程:

SQL> select process, status, sequence# from v$managed_standby;PROCESS   STATUS	SEQUENCE#
--------- ------------ ----------
ARCH	  CLOSING	   325842
ARCH	  CLOSING	   325843
ARCH	  CONNECTED		0
ARCH	  CLOSING	   116143
RFS	  IDLE			0
RFS	  IDLE			0
RFS	  IDLE			0
RFS	  IDLE			0
RFS	  IDLE		   116144
RFS	  IDLE			0
MRP0	  WAIT_FOR_GAP	   116059
RFS	  IDLE			0
RFS	  IDLE		   32584413 rows selected.

重新查询 GAP 信息如下:缺少 5 个归档文件(对应的SEQUENCE#分别为 116059-116063

SQL> SELECT * FROM V$ARCHIVE_GAP;THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------2	  116059	 116063

步骤4:在备库上注册archive log,对应的文件为:2_116059_1109379972.dbf2_116063_1109379972.dbf

-rw-r----- 1 oracle oinstall 111630848 Jul 26 22:35 2_116059_1109379972.dbf
-rw-r----- 1 oracle oinstall   2964992 Jul 26 22:35 2_116060_1109379972.dbf
-rw-r----- 1 oracle oinstall  32430080 Jul 26 22:35 2_116061_1109379972.dbf
-rw-r----- 1 oracle oinstall    209408 Jul 26 22:35 2_116062_1109379972.dbf
-rw-r----- 1 oracle oinstall   6656512 Jul 26 22:35 2_116063_1109379972.dbf

执行如下命令注册archive log

alter database register logfile '/archive/DGHISDB/archivelog/2_116059_1109379972.dbf';
alter database register logfile '/archive/DGHISDB/archivelog/2_116060_1109379972.dbf';
alter database register logfile '/archive/DGHISDB/archivelog/2_116061_1109379972.dbf';
alter database register logfile '/archive/DGHISDB/archivelog/2_116062_1109379972.dbf';
alter database register logfile '/archive/DGHISDB/archivelog/2_116063_1109379972.dbf';

步骤5:执行注册日志的命令后重启数据库同步。

alter database recover managed standby database cancel;  -- 停止同步
alter database recover managed standby database using current logfile disconnect from session;  -- 开启同步

然后重新查看备库的进程:

SQL> select process, status, sequence# from v$managed_standby;PROCESS   STATUS	SEQUENCE#
--------- ------------ ----------
ARCH	  CLOSING	   325842
ARCH	  CLOSING	   325843
ARCH	  CONNECTED		0
ARCH	  CLOSING	   116143
RFS	  IDLE			0
RFS	  IDLE			0
RFS	  IDLE			0
RFS	  IDLE			0
RFS	  IDLE		   116144
RFS	  IDLE			0
MRP0	  APPLYING_LOG	   325810
RFS	  IDLE			0
RFS	  IDLE		   32584413 rows selected.

重新查询 GAP 信息如下:

SQL> SELECT * FROM V$ARCHIVE_GAP;no rows selected

由于 GAP 信息为空,表示已没有缺少的归档日志。

步骤6:重启备库

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.Total System Global Area 2.7793E+10 bytes
Fixed Size		    2266504 bytes
Variable Size		 3288337016 bytes
Database Buffers	 2.4495E+10 bytes
Redo Buffers		    7307264 bytes
Database mounted.
Database opened.

启动数据库同步:

alter database recover managed standby database using current logfile disconnect

查看备库的进程信息:发现MRP0进程的状态已经变成APPLYING_LOG,并且MRP0进程的SEQUENCE#(325845)RFS进程的SEQUENCE#(325845)完全相同。

SQL> select process, status, sequence# from v$managed_standby;PROCESS   STATUS	SEQUENCE#
--------- ------------ ----------
ARCH	  CLOSING	   325844
ARCH	  CONNECTED		0
ARCH	  CONNECTED		0
ARCH	  CLOSING	   116144
RFS	  IDLE			0
RFS	  IDLE			0
RFS	  IDLE		   325845
RFS	  IDLE		   116145
RFS	  IDLE			0
RFS	  IDLE			0
MRP0	  APPLYING_LOG	   32584511 rows selected.

测试发现,在主库上修改数据,在备库上立即可以查询到最新信息。

问题得到解决。

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

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

相关文章

密码学与加密货币:构建去中心化信任的技术基石与未来挑战

密码学是加密货币的技术基石,两者通过数学原理构建去中心化信任体系。以下从技术原理、应用场景及未来挑战三方面展开分析:一、密码学基础:加密货币的安全基石非对称加密体系公钥与私钥:基于椭圆曲线密码学(ECC&#x…

用于 Web 认证的 抗量子签名——ML-DSA 草案

1. 引言 本文描述了在 Web Authentication (WebAuthn) 中实现无密码认证(Passwordless authentication)的方法,该方法使用模块格(Module-Lattice)为基础的数字签名标准(ML-DSA),即 …

ubuntu18.04解压大的tar.gz文件失败

1. 问题描述 我在vmware的虚拟机装有petalinux环境,需要解压downloads_2020.2.tar.gz这个大的压缩包文件,但是总是失败,而且过程很漫长 tar: downloads/git2/github.com.vim.vim.git/objects/pack/pack-f7f2e2add0c8972a9141b557ef725c38069…

App拉起:唤醒即达,告别繁琐操作

在移动互联网进入存量竞争的今天,“让用户少点一次、少等一秒”往往意味着20%以上的转化率差异。openinstall把这套体验总结成一套可落地的App拉起方案:一套SDK一组链接跳转规则一个可自定义的落地页,就能把Web→App的整条动线缩成一次点击。…

开发指南125-HTML DOM事件

1、onload和onunload在页面或某个元素加载完成后或离开后触发事件。2、onchange用于在元素的值发生变化时触发事件。一般用于<input>, <select>, <textarea>等元素3、onfocus 和 onblur激活或失去焦点时触发4、onmouseover 和 onmouseout鼠标移入或移除时触发…

使用redis 作为消息队列时, 如何保证消息的可靠性

使用Redis作为消息队列时&#xff0c;如何保证消息的可靠性 在分布式系统中&#xff0c;消息队列扮演着不可或缺的角色&#xff0c;它能够有效地实现服务间的解耦和异步通信。Redis凭借其出色的性能&#xff0c;常常被用作轻量级的消息队列。然而&#xff0c;Redis本质上是一个…

CentOS7 安装和配置教程

CentOS7 安装和配置教程第一部分&#xff1a;安装准备1. 下载CentOS 7镜像2. 创建安装介质第二部分&#xff1a;安装步骤1. 在VMeare上安装CentOS-7-x86_64-Minimal2. 安装配置3. 安装过程第三部分&#xff1a;初始配置1. 首次启动设置2. 网络配置3. 防火墙配置第四部分&#x…

clock_getres系统调用及示例

39. clock_getres - 获取时钟精度 函数介绍 clock_getres系统调用用于获取指定时钟的精度&#xff08;分辨率&#xff09;。它返回时钟能够表示的最小时间间隔。 函数原型 #include <time.h>int clock_getres(clockid_t clk_id, struct timespec *res);功能 获取指定时钟…

MCU+RTOS调试

1. 引言在做项目时&#xff0c;百分之三十的时间写代码&#xff0c;还有百分之70的时间用于调试。本期将以Keil为例进行调试章节的讲解&#xff0c;目的在于做出一个标准化的调试步骤&#xff0c;方便大家学习如何调试代码。内容分为基础调试、中级调试及进阶调试三部分&#x…

Redis的数据淘汰策略是什么?有哪些?

1.监测设置了TTL的数据volatile-lru&#xff1a;淘汰最近最少使用的数据volatile-lfu&#xff1a;淘汰最近使用次数最少的数据volatile-ttl&#xff1b;淘汰将要过期的数据volatile-random&#xff1a;随机淘汰2.监测全库数据allkeys-lru&#xff1a;淘汰最近最少使用的数据all…

相控阵波束跃度指向误差Matlab仿真

波束跃度影响&#xff1a;TR芯片移相器位数、阵元数量、校准后阵元初始相位、TR芯片移相器精度、波控计算精度等。用MATLAB进行TR芯片移相器位数、阵元数量对指向误差进行仿真。 close all; %线阵波束跃度仿真 20250726 %beam displacement % 波束跃度影响&#xff1a;TR芯片移…

板凳-------Mysql cookbook学习 (十二--------6)

MySQL 8 导入二进制文件(trailer.ogv)操作指南 在MySQL中导入二进制文件(如trailer.ogv视频文件)通常有几种方法&#xff0c;我将详细介绍每种方法的操作步骤。 方法一&#xff1a;使用LOAD_FILE函数导入BLOB字段 这是最直接的方法&#xff0c;适合中小型二进制文件。sql - 1. …

昇思学习营-【模型推理和性能优化】学习心得_20250730

一、权重的加载 模型包含两部分&#xff1a; base model 和 LoRA adapter 其中base model的权重在微调时被冻结&#xff0c; 推理时加载原权重即可&#xff0c;LoRA adapter可通过PeftModel.from_pretrained进行加载。 二、启动推理 通过model.generate&#xff0c;启动推理…

[AI8051U入门第十一步]W5500-服务端

学习目标: 1、连接TCP/IP 2、学习W5500作为服务端代码一、TCP/IP介绍 TCP/IP 协议栈介绍 TCP/IP(Transmission Control Protocol / Internet Protocol)是互联网通信的核心协议族,定义了数据如何在网络中进行传输和路由。它由多个协议组成,采用分层架构,确保不同设备之间…

C 标准库 <time.h> 函数详解

目录 概述 1 核心数据类型 1.1 time_t 1.2 clock_t 1.3 struct tm 1.4 size_t 2 核心函数 2.1 时间获取函数 2.2 时间转换函数 2.3 时间差计算 2.4 时间格式化函数 3 线程安全版本&#xff08;POSIX 扩展&#xff09; 3.1 函数列表 3.2 时间处理完整示例 4 重要…

基于BEKK-GARCH模型的参数估计、最大似然估计以及参数标准误估计的MATLAB实现

基于BEKK-GARCH模型的参数估计、最大似然估计以及参数标准误估计的MATLAB实现。BEKK-GARCH模型是一种多变量GARCH模型&#xff0c;用于估计多个时间序列的条件方差和协方差矩阵。 MATLAB实现BEKK-GARCH模型 1. 准备数据 假设你已经有一个时间序列数据矩阵 returns&#xff0c;每…

TDengine 中 TDgpt 用于异常检测

介绍 TDgpt 内置时序数据异常检测模型 TDengine 中定义了异常&#xff08;状态&#xff09;窗口来提供异常检测服务。异常窗口可以视为一种特殊的事件窗口&#xff08;Event Window&#xff09;&#xff0c;即异常检测算法确定的连续异常时间序列数据所在的时间窗口。与普通事件…

统计学08:概率分布

一、随机变量随机变量是一个将 随机事件 映射到 数值 的数学函数&#xff0c;用于描述事件的结果。随机变量可以是离散的&#xff08;如骰子&#xff09;或连续的&#xff08;如人的身高、体重&#xff09;。1&#xff09;概率质量函数PMF——离散随机变量P(X x) 对应于某个值…

vue3【组件封装】消息反馈 S-msgWin.vue (针对父容器对齐,左右居中,可自定义顶部距离)

最终效果成功的提示报错的提示代码实现components/SUI/S-msgWin.vue <script lang"ts" setup> const props defineProps({msg: {type: Object,required: true,},top: {type: String,default: "50%",},duration: {type: Number,default: 3000,}, });…

MySQL 8.0.42创建MGR集群

MySQL 8.0.42创建MGR集群 概述 关于MySQL MGR集群的介绍就不在这里做详细的介绍了&#xff0c;大家可以自己到官网上查看阅读。在这里主要是实际操作方面的内容 总体结构设计如下图服务器节点信息序号角色IP地址数据库端口MGR端口1主节点192.168.56.1043309100612从节点192.168…