当前位置: 首页 > news >正文

由于主库切换归档路径导致的 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.lryc.cn/news/601757.html

相关文章:

  • Python堆栈实现:从基础到高并发系统的核心技术
  • 模拟实现python的sklearn库中的Bunch类以及 load_iris 功能
  • 20250727让飞凌OK3576-C开发板在Rockchip的原厂Android14下通过耳机播音
  • 两个函数的卷积
  • Node.js特训专栏-配置与环境部署:20.PM2进程守护与负载均衡
  • 以使命为帆,结业是重新出发的号角
  • 电科金仓 KingbaseES 深度解码:技术突破・行业实践・沙龙邀约 -- 融合数据库的变革之力
  • 从0开始学linux韦东山教程Linux驱动入门实验班(6)
  • c# everthing.exe 通信
  • Android基础(一) 运行HelloWorld
  • 【java】 IntelliJ IDEA高效编程设置指南
  • 大模型算法面试笔记——常用优化器SGD,Momentum,Adagrad,RMSProp,Adam
  • Java 代理机制详解:从静态代理到动态代理,彻底掌握代理模式的原理与实战
  • 雪花算法原理深度解析
  • 【0基础PS】PS工具详解--选择工具--快速选择工具
  • 【n8n教程笔记——工作流Workflow】文本课程(第一阶段)——5.4 计算预订订单数量和总金额 (Calculating booked orders)
  • 使用Python,OpenCV,K-Means聚类查找图像中最主要的颜色
  • Unity Catalog与Apache Iceberg如何重塑Data+AI时代的企业数据架构
  • 【LeetCode 热题 100】35. 搜索插入位置——二分查找(左闭右开)
  • 高格办公空间:以 “空间为基,服务为翼”,重塑办公场景生态
  • 【语义分割】记录2:yolo系列
  • libomxil-bellagio移植到OpenHarmony
  • java小白闯关记第一天(两个数相加)
  • Python-初学openCV——图像预处理(三)
  • XSS利用
  • Web-Machine-N7靶机攻略
  • 文件权限标记机制在知识安全共享中的应用实践
  • JavaEE初阶第十二期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(十)
  • C++学习(线程相关)
  • 05 - spring security权限控制