暂无图片
暂无图片
3
暂无图片
暂无图片
5
暂无图片

主库resize datafile操作导致DG同步报错

原创 心在梦在 2022-11-02
1522

主库resize datafile操作导致DG同步报错

[TOC]

一、问题描述

应用人员反馈ADG库,报表查询数据延迟。

二、原因排查

1. 检查DG同步状态

SQL> set line222 SQL> select process,status,thread#,sequence# from v$managed_standby; PROCESS STATUS THREAD# SEQUENCE# --------- ------------ ---------- ---------- ARCH CLOSING 1 613912 ARCH CLOSING 2 653575 ARCH CONNECTED 0 0 ARCH CLOSING 1 613913 RFS IDLE 0 0 RFS IDLE 0 0 RFS IDLE 0 0 RFS IDLE 2 653575 RFS IDLE 0 0 RFS IDLE 0 0 RFS IDLE 0 0 RFS IDLE 1 613914 12 rows selected.
复制

结论: 没有RMP进程,同步异常停止了。

2. 检查备库alert日志,查看MRP进程停止原因

Media Recovery Waiting for thread 2 sequence 653569 (in transit) Recovery of Online Redo Log: Thread 2 Group 70 Seq 653569 Reading mem 0 Mem# 0: /oradata7/xxx/xxx/redo/redo70.log MRP0: Background Media Recovery terminated with error 1237 Errors in file /u01/app/oracle/diag/rdbms/xxx/xxx/trace/xxx_pr00_7011.trc: ORA-01237: cannot extend datafile 1502 ORA-01110: data file 1502: '/oradata5/xxx/xxx/datafile/xxx.318.1020330909' ORA-19502: write error on file "/oradata5/xxx/xxx/datafile/xxx.318.1020330909", block number 1003648 (block size=8192) ORA-27072: File I/O error
复制

结论:ORA-27072: File I/O error报错导致MRP进程中断,检查发现是/oradata5磁盘空不足,使用率已达到100%,经过检查,发现是因为主库执行了resize datafile 30G,而相对应的备库数据文件,所在的/oradata5数据盘空间不足,不够resize 到30G,导致MRP进程中断。 

三、解决办法

1. 停止备库

SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down.
复制

2. 移动数据文件到其他盘符

mv /oradata5/xxx/xxx/datafile/xxx.318.1020330909 /oradata7/xxx/xxx/datafile/xxx.318.1020330909
复制

3. 修改控制文件信息

SQL> startup mount ORACLE instance started. Total System Global Area 1068937216 bytes Fixed Size 2260088 bytes Variable Size 864027528 bytes Database Buffers 197132288 bytes Redo Buffers 5517312 bytes Database mounted. SQL> alter system set standby_file_management=manual; System altered. SQL> alter database rename file '/oradata5/xxx/xxx/datafile/xxx.318.1020330909' to '/oradata7/xxx/xxx/datafile/xxx.318.1020330909'; Database altered. SQL> alter system set standby_file_management=AUTO; System altered.
复制

4. 启动同步

SQL> alter database open; Database altered. SQL> alter database recover managed standby database using current logfile disconnect; Database altered.
复制

5. 再次检查同步

SQL> set line222 SQL> select process,status,thread#,sequence# from v$managed_standby; PROCESS STATUS THREAD# SEQUENCE# --------- ------------ ---------- ---------- ARCH CLOSING 2 653591 ARCH CLOSING 2 653590 ARCH CONNECTED 0 0 ARCH CLOSING 1 613928 RFS IDLE 0 0 RFS IDLE 0 0 RFS IDLE 0 0 RFS IDLE 0 0 RFS IDLE 0 0 RFS IDLE 0 0 RFS WRITING 1 613929 RFS WRITING 2 653592 MRP0 APPLYING_LOG 1 613916 13 rows selected.
复制

结论: DG同步恢复正常。

四、其他报错

最开始是想通过offline datafile 方式,在不关库的情况下移动报错的数据文件,但是执行过程中有报错。具体如下:

  1. 执行datafile 1052 offline drop 没有报错。(备库必须加drop,否则也报错)
  2. 移动数据文件到其他盘符,没有报错。
  3. rename datafile 操作开始报错。具体报错信息如下:

1. 报错信息

  1. 执行alter database rename file …命令,报错如下:
SQL> alter database rename file '/oradata5/xxx/xxx/datafile/xxx.318.1020330909' to '/oradata7/xxx/xxx/datafile/xxx.318.1020330909'; ORA-01124: cannot recover data file 1052 - file is in use or recovery
复制
  1. 重新online datafile,先执行recover datafile,但是执行报错:
SQL> recover datafile 1052; ORA-00283: recovery session canceled due to errors ORA-01610: recovery using the BACKUP CONTROLFILE option must be done SQL> recover datafile 1052 using backup controlfile; ORA-00274: illegal recovery option USING
复制

 所以,又将数据库重启至mount状态,rename datafile后,再open database。

2. 解决办法

在open状态下,直接执行online操作,并没有报错

SQL> alter database datafile 1052 online; Database altered. SQL> select status from v$datafile where file#=1052; STATUS -------------- RECOVER SYS@ORCLCDB> SELECT FILE#,status FROM v$datafile_header where FILE#=1052; FILE# STATUS ---------- -------------- 1052 ONLINE
复制

结论:

1.直接执行online datafile 无报错,但是查询v$datafile中status仍然为recover状态,查询v$datafile_header 中status为online状态。

 2.本来想着如果datafile 1052 一直是recover状态的话,就从主库重新备份控制文件,更换备库的,但是经过观察后,在MRP应用一段时间后,datafile 1052状态从recover变为online。

SQL> alter database recover managed standby database using current logfile disconnect; Database altered. SQL> select status from v$datafile where file#=1052; STATUS -------------- ONLINE
复制
最后修改时间:2022-11-02 09:58:41
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

流星
暂无图片
2年前
评论
暂无图片 0
备库修改了数据文件的位置,主库上不需要修改吗?备库的参数db_file_name_convert需不需要修改?
2年前
暂无图片 点赞
4
心在梦在
暂无图片
2年前
回复
暂无图片 0
主库不用修改,db_file_name_convert这个参数主要是针对主库新增加的数据文件进行转换,备库数据文件如果已经被db_file_name_convert转换过了,就是一个独立的数据文件了,即使后面改了这个参数,也不影响之前的数据文件。
2年前
暂无图片 点赞
回复
流星
暂无图片
2年前
回复
暂无图片 0
@心在梦在 o了
2年前
暂无图片 点赞
回复
流星
暂无图片
2年前
回复
暂无图片 0
@心在梦在 步骤跟https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/managing-oracle-data-guard-physical-standby-databases.html#GUID-2D3E5488-237C-467A-AB8B-7C09B6E43CE0差不多,可参考
2年前
暂无图片 点赞
回复
流星
暂无图片
1年前
回复
暂无图片 0
19c 2.5章节Moving the Location of Online Data Files You can perform an online move data file operation independently on the primary and on the standby (either physical or logical). The standby is not affected when a data file is moved on the primary, and vice versa.
1年前
暂无图片 点赞
回复