当前位置: 首页 > 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.dtcms.com/a/301204.html

相关文章:

  • Java异常处理
  • 使用Python,OpenCV计算跑图的图像彩色度
  • 移植pbrt中的并行化到ray trace in weeks中
  • JVM内存结构
  • 零基础学习性能测试第五章:JVM性能分析与调优-JVM运行时内存区域介绍
  • 企业级数据架构构建之道
  • Unity FXAA
  • SQL注入SQLi-LABS 靶场less21-25详细通关攻略
  • Ubuntu普通用户环境异常问题
  • Linux->自定义shell
  • Acrobat 文件夹级脚本扩展表单功能
  • 【奔跑吧!Linux 内核(第二版)】第4章:内核编译和调试
  • 物联网安装调试-物联网网关
  • Python数据分析基础(二)
  • 两个函数的卷积
  • Kafka——消费者组消费进度监控都怎么实现?
  • 数字签名与数字证书
  • [leetcode] 图论算法(DFS和BFS)
  • Java“class file contains wrong class”解决
  • NX868NX872美光固态闪存NX873NX876
  • 疯狂星期四文案网第21天运营日记
  • 10.模块与包:站在巨人的肩膀上
  • 去除视频字幕 5: 使用 ProPainter, 记录探索过程
  • red靶机
  • MCU 通用AT指令处理框架
  • 洛谷 P2114 [NOI2014] 起床困难综合症-普及+/提高
  • AutoLabelImg:高效的数据自动化标注工具和下载
  • 风光氢系统仿真与容量扩展设计
  • 飞牛NAS本地化部署n8n打造个人AI工作流中心
  • 识别身份证用证件号或姓名改名,如何ocr识别身份证复印件并导出至excel表格?身份证读取软件导出到Excel乱码怎么解决?