1. ADG归档间隙问题概述在Oracle Data Guard环境中归档间隙Archive Gap是指主库生成的归档日志未能完整传输到备库的情况。这种情况会导致备库无法与主库保持同步严重时可能造成数据不一致。归档间隙通常表现为备库应用日志时出现ORA-00308或ORA-16057错误或者在DG Broker中显示GAP状态。归档间隙的产生通常有以下几种原因网络中断导致归档日志传输失败主库或备库存储空间不足归档日志被意外删除主备库参数配置不当归档进程ARCH/LGWR异常终止重要提示发现归档间隙后应尽快处理长时间未解决的间隙可能导致备库无法自动恢复同步最终需要手动干预甚至重建备库。2. 间隙检测与诊断方法2.1 使用DG Broker检查间隙状态DG Broker提供了最直接的间隙检测方式DGMGRL show database standby_db GapStatus输出示例Gap Status: Gap present Current gap: sequence 1234 to 12562.2 查询V$ARCHIVE_GAP视图在备库执行以下查询获取具体的缺失日志序列号SELECT thread#, low_sequence#, high_sequence# FROM v$archive_gap;2.3 检查警报日志和跟踪文件主备库的警报日志alert_SID.log通常会记录归档传输错误Error 12154 connecting to destination LOG_ARCHIVE_DEST_22.4 网络连通性测试验证主备库之间的网络连接是否正常tnsping standby_service_name3. 自动间隙处理机制3.1 FALFetch Archive Log机制Oracle提供了FAL机制自动处理间隙相关参数包括FAL_SERVER指定获取缺失日志的主库服务名FAL_CLIENT备库标识LOG_ARCHIVE_CONFIGDG配置参数配置示例ALTER SYSTEM SET fal_serverprimary_db SCOPEBOTH; ALTER SYSTEM SET fal_clientstandby_db SCOPEBOTH;3.2 自动间隙解析流程备库检测到间隙后通过FAL进程向主库请求缺失日志主库接收到请求后将缺失的归档日志传输到备库备库接收并应用这些日志间隙状态自动清除4. 手动处理归档间隙方案4.1 识别缺失的归档日志首先确认需要哪些日志文件-- 在备库执行 SELECT name, sequence#, first_time, next_time FROM v$archived_log WHERE appliedNO ORDER BY sequence#;4.2 从主库复制缺失日志在主库定位归档日志文件SELECT name, sequence# FROM v$archived_log WHERE sequence# BETWEEN 1234 AND 1256;使用SCP或SFTP将文件复制到备库scp /oracle/arch/arch_1234_789123456.arc oraclestandby:/oracle/arch/4.3 手动注册并应用日志在备库执行ALTER DATABASE REGISTER PHYSICAL LOGFILE /oracle/arch/arch_1234_789123456.arc; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;4.4 验证间隙是否解决检查应用进度SELECT sequence#, applied FROM v$archived_log ORDER BY sequence#;5. 特殊场景处理方案5.1 主库已删除缺失日志如果主库已清理旧归档需要从备份恢复在主库使用RMAN备份归档日志RMAN BACKUP ARCHIVELOG FROM SEQUENCE 1234 UNTIL SEQUENCE 1256;将备份集传输到备库在备库恢复归档日志RMAN CATALOG START WITH /path/to/backup/; RMAN RECOVER STANDBY DATABASE;5.2 大间隙处理超过100个序列对于大间隙建议采用增量备份方式在主库创建增量备份RMAN BACKUP INCREMENTAL FROM SCN 12345678 DATABASE;将备份传输到备库在备库应用增量备份RMAN RECOVER STANDBY DATABASE;6. 预防间隙的最佳实践6.1 参数优化配置确保以下关键参数正确设置-- 主库设置 ALTER SYSTEM SET log_archive_dest_2SERVICEstandby_db LGWR SYNC AFFIRM VALID_FOR(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAMEstandby_db SCOPEBOTH; -- 备库设置 ALTER SYSTEM SET standby_file_managementAUTO SCOPEBOTH; ALTER SYSTEM SET db_file_name_convert/oracle/data/primary/,/oracle/data/standby/ SCOPEBOTH;6.2 监控方案设计创建定期监控脚本检查DG状态SELECT name, open_mode, protection_mode, protection_level, switchover_status, database_role, dataguard_broker, guard_status FROM v$database;6.3 存储空间管理设置归档日志自动清理策略RMAN CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; RMAN CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;6.4 网络冗余配置考虑使用多路径网络传输归档日志ALTER SYSTEM SET log_archive_dest_3SERVICEstandby_db_alt LGWR SYNC AFFIRM VALID_FOR(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAMEstandby_db SCOPEBOTH;7. 常见问题排查实录7.1 ORA-16057错误处理当出现ORA-16057: DGID from standby does not match DGID from primary错误时检查主备库的DB_UNIQUE_NAME是否匹配验证LOG_ARCHIVE_CONFIG参数设置确认备库的初始化参数文件是否包含正确的DG配置7.2 归档日志应用停滞如果发现MRP进程停滞不前检查备库的CPU和I/O资源使用情况确认没有长时间运行的事务阻塞恢复检查是否有数据文件处于OFFLINE状态7.3 网络闪断导致频繁间隙对于不稳定的网络环境考虑增加LOG_ARCHIVE_DEST_n的NET_TIMEOUT参数配置归档传输重试机制ALTER SYSTEM SET log_archive_dest_2SERVICEstandby_db LGWR SYNC AFFIRM REOPEN300 NET_TIMEOUT30 SCOPEBOTH;8. 性能优化建议8.1 并行应用设置对于高性能环境启用并行应用提高恢复速度ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION PARALLEL 4;8.2 压缩传输配置在网络带宽有限的环境中启用压缩ALTER SYSTEM SET log_archive_dest_2SERVICEstandby_db LGWR SYNC AFFIRM COMPRESSIONENABLE SCOPEBOTH;8.3 批量应用调优调整批量应用参数优化性能ALTER SYSTEM SET standby_archive_dest/oracle/arch/stdby SCOPEBOTH; ALTER SYSTEM SET standby_file_managementAUTO SCOPEBOTH;9. 高级恢复技术9.1 使用增量SCN恢复当传统间隙处理方法失效时可采用SCN-based恢复确定备库当前的SCNSELECT current_scn FROM v$database;在主库创建增量备份RMAN BACKUP INCREMENTAL FROM SCN 12345678 DATABASE;将备份传输到备库并应用9.2 物理备用库转快照备用库对于复杂恢复场景可临时转换为快照备用库停止MRP进程转换为快照备用库ALTER DATABASE CONVERT TO SNAPSHOT STANDBY;执行必要的恢复操作后再转换回物理备用库10. 自动化处理脚本示例10.1 间隙检测脚本#!/bin/bash # 检测ADG间隙脚本 ORACLE_SIDstandby export ORACLE_HOME/oracle/product/19c/dbhome_1 gap_status$($ORACLE_HOME/bin/dgmgrl -silent / show database standby_db GapStatus | grep Gap present) if [ -n $gap_status ]; then echo CRITICAL: Archive gap detected - $gap_status exit 1 else echo OK: No archive gap detected exit 0 fi10.2 自动间隙处理脚本#!/bin/bash # 自动处理ADG间隙 PRIMARY_DBprimary_db STANDBY_DBstandby_db ORACLE_HOME/oracle/product/19c/dbhome_1 ARCH_DIR/oracle/arch # 获取间隙信息 gap_info$($ORACLE_HOME/bin/sqlplus -s / as sysdba EOF set heading off set feedback off SELECT thread#||,||low_sequence#||,||high_sequence# FROM v\$archive_gap; EOF ) if [ -z $gap_info ]; then echo No archive gap detected exit 0 fi # 处理每个间隙 echo $gap_info | while IFS, read thread low_seq high_seq; do echo Processing gap for thread $thread: sequence $low_seq to $high_seq # 从主库复制缺失的归档日志 for seq in $(seq $low_seq $high_seq); do arch_file$(ssh oracle$PRIMARY_DB $ORACLE_HOME/bin/sqlplus -s / as sysdba EOF set heading off set feedback off SELECT name FROM v\\\$archived_log WHERE sequence#$seq AND thread#$thread; EOF ) if [ -n $arch_file ]; then echo Copying $arch_file from $PRIMARY_DB scp oracle$PRIMARY_DB:$arch_file $ARCH_DIR/ # 注册归档日志 $ORACLE_HOME/bin/sqlplus -s / as sysdba EOF ALTER DATABASE REGISTER PHYSICAL LOGFILE $ARCH_DIR/$(basename $arch_file); EOF fi done done # 恢复备库 $ORACLE_HOME/bin/sqlplus -s / as sysdba EOF ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; EOF11. 关键注意事项与经验分享在实际处理ADG归档间隙时有几个关键点需要特别注意时间同步至关重要确保主备库的系统时间同步NTP服务配置正确。时间不同步可能导致归档日志应用失败甚至造成数据不一致。处理顺序不能乱当存在多个线程的间隙时必须按照日志生成的时间顺序处理。先处理较早的间隙再处理较新的间隙。空间监控要提前在处理大间隙前务必检查备库的存储空间。一个常见的错误是开始恢复后才发现空间不足导致恢复中断。网络带宽评估传输大量归档日志时评估网络带宽和预计传输时间。对于TB级间隙可能需要考虑物理运输存储介质。测试环境验证对于关键生产系统建议先在测试环境验证恢复方案。特别是使用非标准方法如增量SCN恢复时。文档记录习惯详细记录每次间隙处理的过程和结果。这些记录在后续问题排查和制定预防措施时非常宝贵。参数调整谨慎修改关键DG参数前充分了解参数影响。某些参数如LOG_ARCHIVE_DEST_STATE_n的更改可能导致意外行为。备库状态确认在处理间隙前确认备库处于正确的状态MOUNTED或READ ONLY。错误的数据库状态可能导致恢复失败。版本兼容检查跨版本DG环境中特别注意Oracle版本的兼容性。某些版本组合对归档日志格式有特殊要求。备份策略配合确保备份策略与DG配置协调。例如RMAN的保留策略应考虑到备库应用延迟的可能性。
企业数字化 ERP 产品动态
相关推荐
前缀和算法解析与LeetCode 303实战 1. 前缀和算法基础概念前缀和(Prefix Sum)是一种通过对原始数组进行预处理来优化区间查询操作的算法技巧。它的核心思想是预先计算并存储数组从起始位置到每个位置的累加和,从而将后续的区间求和操作转化为简单的减法运算。1.1 前缀和的定义与… · 2026/11/3 3:23:33
编程农场:游戏化工具提升开发者效率 1. 项目概述:编程农场是什么?第一次听到"编程农场"这个概念时,我脑海中浮现的是程序员们戴着草帽在键盘上"耕作"的有趣画面。但实际接触后发现,这是一个将编程学习与时间管理相结合的创新工具。简单来说&… · 2026/11/3 3:23:33
Vue2 v-for循环渲染原理与性能优化实战 1. Vue2循环渲染核心机制解析在Vue2项目开发中,v-for指令是处理列表渲染的瑞士军刀。这个看似简单的语法糖背后,隐藏着Vue响应式系统的精妙设计。我曾在电商后台管理系统开发中,遇到过2000商品列表的渲染性能问题,最终通过深入理解… · 2026/11/3 3:23:33
2024年TensorFlow实战指南:从Keras到部署,对比PyTorch 打开PyPI的下载统计页,TensorFlow依然是整个深度学习生态里下载量最大的框架之一。但在很多新手群里,一提TensorFlow总有人觉得这是“老框架”,好像已经被PyTorch全面超越了。我自己的感觉是,这种印象有对的部分,也有很… · 2026/11/3 3:51:38
MNN部署YOLO人体关键点检测:C++工程CPU/GPU全流程实现 做部署这些年,我一直觉得“跑通模型”只是第一步,真正让人头疼的是把模型塞进C工程里,还要在CPU和GPU两种条件下都稳定工作。这个项目就是把YOLOv8-Pose、YOLO11-Pose、YOLO26-Pose人体关键点检测模型,用MNN部署到C环境࿰… · 2026/11/3 3:51:38
华为手机离线AI自主开发闭环实战 1. 项目本质与真实场景还原:一台“裸机”华为手机上的AI自主开发闭环你看到标题第一反应可能是:“这不就是用AI写个App再装上去?”——错了。这个项目真正令人头皮发麻的点,根本不在“写代码”,而在于整个开发-编译-安… · 2026/11/3 3:51:38
AI Agent技能管理器:基于SKILL.md与Redis的可视化操作系统 1. 这不是又一个“AI Agent 配置面板”,而是一套可落地的技能生命周期操作系统你有没有试过给 AI Agent 写了十几个工具函数——天气查询、数据库读写、邮件发送、PDF 解析、Excel 表格生成……结果两周后打开代码,连哪个函数叫什么、参数怎么传、返回值… · 2026/11/3 3:51:38
Kafka核心术语与架构设计深度解析 1. Kafka核心术语全景解析作为分布式消息系统的标杆,Kafka的设计哲学体现在其特有的术语体系中。初次接触Kafka时,这些术语就像密码本里的暗号,理解它们才能与Kafka进行有效对话。让我们从生产者-消费者的基础模型开始,逐步拆解每… · 2026/11/3 3:51:38
深度学习在食品图像分类中的应用与实践 1. 深度学习食品分类项目概述食品分类是计算机视觉领域一个极具实用价值的课题。我在实际项目中发现,利用深度学习技术来自动识别和分类食品图像,不仅能大幅提升效率,还能避免人工分类的主观性和疲劳误差。这个技术可以应用于餐饮管理、健康监… · 2026/11/3 3:50:37
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 4:42:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 5:17:18