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

如何处理oracle 12c DG归档日志缺失(gap)导致备库同步中断问题

DG实验环境介绍:

instance_name

架构

主库

orcl

单实例

备库

orclstd

单实例

若着急处理故障,可跳过下面‘一 故障模拟’这一步,直接看‘二 解决办法’

一 故障模拟

这里通过在主库禁用归档日志传输,在主库mv几个归档日志,期间造几条数据,在主库新增个数据文件,模拟下归档日志丢失导致的备库同步中断,丢失数据的情况。

1.1 在主库禁用归档日志传输

alter system set log_archive_dest_state_2 =defer;

1.2 查看主备当前最新归档日志

SELECT NAME,SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

1.3 在主库造几条数据,切几次归档

这3条数据没同步到备库。

#主库

#备库

1.4 在主库模拟删除这几个归档

[oracle@host01 arch]$ mv 1_1173_1164727119.dbf 1_1173_1164727119.dbf_bak

[oracle@host01 arch]$ mv 1_1174_1164727119.dbf 1_1174_1164727119.dbf_bak

[oracle@host01 arch]$ mv 1_1175_1164727119.dbf 1_1175_1164727119.dbf_bak

1.5 在主库开启归档日志传输

alter system set log_archive_dest_state_2 =enable;

1.6 在备库查看归档日志gap

SQL> select * from v$archive_gap;

   THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#     CON_ID

---------- ------------- -------------- ----------

         1          1173           1175          1

可以看到产生了gap。

之后主库产生的归档日志同步到备库了,但是SEQUENCE为1173和1175的没同步到备库。

而且故障之后的数据也没同步到备库。

1.7 在主库新增个表空间及数据文件

create tablespace user2 datafile '/data/app/oracle/oradata/orcl/users2_01.dbf' size 10m;

二 解决办法

2.1 查看备库v$dataguard_status有何报错

select message from v$dataguard_status;

最新报错:

FAL[client]: Error fetching gap sequence, no FAL server specified

SQL> alter system set fal_server=orcl;

select message from v$dataguard_status;

最新报错:

FAL[client]: Failed to request gap sequence

 GAP - thread 1 sequence 1173-1175

 DBID 1692507853 branch 1164727119

2.2 刷新备库控制文件

2.2.1 在备库查询当前SCN

select current_scn from v$database;

记录下查询出来的scn,这里是41050771,后面会用到。

2.2.2 保存备库当前rman配置

#在备库上操作

su - oracle

rman target / nocatalog log=/tmp/RMAN_settings.log << EOF

show all;

EOF

#移除没用的信息

grep ^CONFIGURE /tmp/RMAN_settings.log | grep -v 'RETENTION POLICY' >/tmp/RMAN_settings.rman

rm /tmp/RMAN_settings.log

2.2.3 刷新备库控制文件 --关键步骤

#在备库操作

shutdown immediate;

rman target / nocatalog

RMAN> startup nomount

RMAN> restore standby controlfile from service <tns alias for primary database>;

这里是 restore standby controlfile from service orcl;

2.2.4 替换RMAN配置

#替换RMAN配置

RMAN> alter database mount;

RMAN> @/tmp/RMAN_settings.rman

2.2.5 Catalog Standby Database Files to the Refreshed Control File

2.2.5.1 CATALOG START WITH DATAFILE

此时,刷新的控制文件具有来自主数据库的文件位置和元数据。使用RMAN CATALOG命令用备用数据库文件位置更新控制文件。

catalog start with '数据文件路径';

这里是:

catalog start with '/data/app/oracle/oradata/orclstd';

/*

SQL> select name from v$datafile;

NAME

--------------------------------------------------------------------------------

/data/app/oracle/oradata/orclstd/system01.dbf

/data/app/oracle/oradata/orclstd/baidd02.dbf

/data/app/oracle/oradata/orclstd/sysaux01.dbf

/data/app/oracle/oradata/orclstd/undotbs01.dbf

/data/app/oracle/oradata/orclstd/baidd01.dbf

/data/app/oracle/oradata/orclstd/users01.dbf

*/

RMAN> catalog start with '/data/app/oracle/oradata/orclstd';

中间输入个YES

2.2.5.2 CATALOG START WITH REDO LOG

catalog start with '<RECO DISKGROUP>/<standby db_unique_name>/';

这里是:

/data/app/oracle/oradata/orclstd

/*

SQL> SELECT MEMBER FROM V$LOGFILE;

MEMBER

--------------------------------------------------------------------------------

/data/app/oracle/oradata/orclstd/redo03.log

/data/app/oracle/oradata/orclstd/redo02.log

/data/app/oracle/oradata/orclstd/redo01.log

/data/app/oracle/oradata/orclstd/STANDBYREDO04.LOG

/data/app/oracle/oradata/orclstd/STANDBYREDO05.LOG

/data/app/oracle/oradata/orclstd/STANDBYREDO06.LOG

/data/app/oracle/oradata/orclstd/STANDBYREDO07.LOG

已选择 7 行。

*/

2.2.6 restore丢失的文件

如果在备库的SCN和刷新的控制文件的SCN之间创建过数据文件,则文件将丢失。

识别任何丢失的文件并恢复它们。

SQL> select file#,name from v$datafile where creation_change# >= 41050771;

     FILE# NAME

---------- --------------------------------------------------

         8 /data/app/oracle/oradata/orclstd/users2_01.dbf

41050771是2.2.1 ‘在备库查询当前SCN’那里查询出来的值。

如果查询结果为空,则跳过该步骤,如果查询返回有内容,则必须还原文件。

run

{

set newname for database to orclstd;

restore datafile 8 FROM SERVICE orcl;

}

#上面标黄的orclstd是备库instance_name,8是备库比主库少的数据文件的FILE#,orcl是主库instance_name

2.2.7 Switch Database to Copy

RMAN> switch database to copy;

RMAN-00571: ===========================================================

RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571: ===========================================================

RMAN-03002: 位于 05/08/2025 14:45:18 的 switch to copy 命令失败

RMAN-06571: 数据文件 1 没有可恢复的副本

报这个错没关系,继续往下进行。

2.2.8 Clean Up Orphaned Files

如果在备用的SCN和刷新的控制文件的SCN之间删除了任何文件,则该文件仍将是RMAN中的数据文件副本。删除任何数据文件副本以删除不需要的文件。

RMAN> list datafilecopy all;

RMAN> delete datafilecopy all;

2.3 清理online redo log和standby log file

#在备库操作

SQL> select group#,member from v$logfile order by group#;

    GROUP# MEMBER

---------- --------------------------------------------------

         1 /data/app/oracle/oradata/orclstd/redo01.log

         2 /data/app/oracle/oradata/orclstd/redo02.log

         3 /data/app/oracle/oradata/orclstd/redo03.log

         4 /data/app/oracle/oradata/orclstd/STANDBYREDO04.LOG

         5 /data/app/oracle/oradata/orclstd/STANDBYREDO05.LOG

         6 /data/app/oracle/oradata/orclstd/STANDBYREDO06.LOG

         7 /data/app/oracle/oradata/orclstd/STANDBYREDO07.LOG

alter database clear logfile group 1;

alter database clear logfile group 2;

alter database clear logfile group 3;

alter database clear logfile group 4;

alter database clear logfile group 5;

alter database clear logfile group 6;

alter database clear logfile group 7;

2.4 Roll the Standby Database Forward

2.4.1 将备库重新启动到mount状态

shutdown immediate;

startup mount;

2.4.2 执行Recover From Service --关键步骤

RMAN> recover database from service orcl noredo using compressed backupset;

这里的orcl是主库的instance_name

2.5 将数据库启动到open状态

alter database open;

2.6 开始应用日志日志

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE using current logfile DISCONNECT FROM SESSION;

SQL> select open_mode,database_role from v$database;

OPEN_MODE            DATABASE_ROLE

-------------------- ----------------

READ ONLY WITH APPLY PHYSICAL STANDBY

2.7 验证主库故障期间产生的数据是否恢复到了备库

可以看到丢失的归档日志对应的数据同步到了备库。

--本篇文章参考自:

https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=354541008397548&id=2850185.1&_adf.ctrl-state=byh8d5ycd_52

http://www.xdnf.cn/news/4796.html

相关文章:

  • 创建型模式:抽象工厂(Abstract Factory)模式
  • Matlab 数控车床进给系统的建模与仿真
  • ubuntu24.04安装cuda
  • 微程序控制器的详细工作过程
  • 基于精准光域控制的光触发RFID标签
  • 【万字长文】深入浅出 LlamaIndex 和 LangChain:从RAG到智能体,轻松驾驭LLM应用开发
  • python调用国税乐企直连接口开数电票之API调用工具类
  • AI领域的MCP(Model-Centric Paradigm)
  • 无线远传压力传感装置:城市管网的 “压力小卫士”
  • 【盟通杂谈】为什么现代工业需要工业协议?
  • CDGP|数据全生命周期的“收数、治数、用数、保数”体系详解
  • 操作系统 : 线程概念与控制
  • Nacos源码—Nacos集群高可用分析(三)
  • 无需标记点,精准面部捕捉!无线面捕头盔赋予自由表演空间
  • 力扣94. 二叉树的中序遍历
  • 简单网络交换、路由
  • Java 异常处理
  • 【DBMS学习系列】一、DBMS(数据库管理系统)的存储模型
  • 学成在线之课程管理
  • 100个常用的DeepSeek指令
  • Vue事件总线(EventBus)使用指南:详细解析与实战应用 父子组件传值
  • Chain of Thought (思维链) 技术详解
  • 按摩椅上的气囊系统 是现代按摩椅中非常关键的组成部分,它与机芯系统相辅相成,为用户提供全方位、更接近真人按摩的体验
  • WSL(Windows Subsystem for Linux)入门
  • 绿色计算:可持续发展的计算技术
  • 记录一次华为魔改 fusionlnsight和ai问答的狗血故事
  • 【吃透 Elasticsearch 的核心原理】学习步骤
  • 系统网络运维基础:Linux与Windows实践指南(带电子书资料)
  • 网络磁盘挂载 iSCSI、SMB、WebDAV和FTP协议比较
  • k8s术语之job