首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Every Day of a DBA,第155期: 备库归档磁盘耗尽 DG 异常恢复记录

Every Day of a DBA,第155期: 备库归档磁盘耗尽 DG 异常恢复记录

作者头像
用户3107127
发布2026-07-21 14:20:47
发布2026-07-21 14:20:47
220
举报

1.故障

对oracle adg 进行巡检,发现错误:

代码语言:javascript
复制
DGMGRL> show configuration

Configuration - ycjj2dg

  Protection Mode: MaxPerformance
  Databases:
    ycjj      - Primary database
      Error: ORA-16778: redo transport error for one or more databases

    ycjj2dg - Physical standby database
      Warning: ORA-16857: standby disconnected from redo source for longer than specified threshold

  Fast-Start Failover: DISABLED

Configuration Status:
ERROR

DGMGRL>

2.错误说明

  • ORA-16778:主库向备库传输 Redo 日志时发生通信 / 链路 / 配置类故障
  • ORA-16857:备库长时间无法接收主库 Redo 流,心跳链路断开超时

3.故障排查

  1. 查看主库是否运行正常,归档日志是否正常产生
  2. 查看备件是否运行正常,归档日志是否正常存储(主库发送的归档日志)

根据上面的排查思路:

发现备库的磁盘空间写满,主库的归档日志无法写入到备库。

备库磁盘空间耗尽,无法接收、存储主库传输的归档Redo日志:

  1. 主库Redo传输进程投递失败 → 上报 ORA-16778 重做传输错误;
  2. 备库长期收不到Redo流,心跳超时 → 上报 ORA-16857 备库断开源库告警;
  3. DGMGRL整体配置状态变为 ERROR,ADG同步完全中断。

4. 紧急恢复步骤

步骤1:清理备库磁盘,释放存储空间

  1. 登录备库服务器,定位归档/Flash Recovery Area目录(归档存放路径)
代码语言:javascript
复制
# 查看备库归档路径
sqlplus / as sysdba
show parameter log_archive_dest;
show parameter db_recovery_file_dest;
  1. 安全清理冗余文件(优先操作)
  • 方案A:删除已完成应用、不再需要的过期归档(备库已apply完成的归档可删)
代码语言:javascript
复制
RMAN> crosscheck archivelog all;
# 删除7天前已应用归档
RMAN> delete noprompt archivelog until time 'sysdate-7' applied on standby;
  • 方案B:清理过期备份、审计日志、trash临时文件释放空间

⚠️ 禁止删除尚未在备库完成恢复的归档,否则会出现日志缺口,需要重建DG。

  1. 确认磁盘使用率下降,目录可正常写入文件
代码语言:javascript
复制
df -h  # 校验归档所在文件系统使用率 <90%

步骤2:校验主备库监听、tns连通性

  1. 主库测试访问备库TNS
代码语言:javascript
复制
-- 主库sqlplus
select sysdate fromdual@ycjj2dg;
  1. 备库测试访问主库TNS
代码语言:javascript
复制
-- 备库sqlplus
select sysdate fromdual@ycjj;

若连通失败,修复tnsnames.ora/listener.ora,重启监听。

步骤3:重置DG错误状态,恢复Redo传输

方式1:DGMGRL清除数据库错误
代码语言:javascript
复制
DGMGRL> connect sys/主库sys密码@ycjj
DGMGRL> edit database ycjj set property LogXptStatus=reset;
DGMGRL> edit database ycjj2dg set property StatusReport=reset;
DGMGRL> show configuration
方式2:主库手动重启Redo传输进程
代码语言:javascript
复制
-- 主库执行
altersystemset log_archive_dest_state_2 = defer;
altersystem switch logfile;
altersystemset log_archive_dest_state_2 =enable;
altersystem switch logfile;

步骤4:验证ADG同步恢复正常

  1. DGMGRL查看整体状态
代码语言:javascript
复制
DGMGRL> show configuration

预期结果:无Error、Warning,Configuration Status: SUCCESS

  1. 查看主库Redo传输状态
代码语言:javascript
复制
select dest_id,status,error from v$archive_dest where dest_id=2;

STATUS显示VALIDERROR字段为空即正常。

  1. 备库校验归档接收&应用进度
代码语言:javascript
复制
-- 查看备库已接收归档
select sequence#,applied from v$archived_log order by sequence# desc;
-- 查看MRP恢复进程是否运行
select process,statusfrom v$managed_standby;

MRP0进程状态为APPLYING_LOG代表日志恢复正常。


5.长期预防方案

1. 磁盘容量监控告警

对备库归档目录、闪回区磁盘使用率配置监控阈值:

  • 使用率≥80%:触发预警通知运维;
  • 使用率≥90%:触发紧急告警,及时扩容/清理归档。

2. 归档自动清理策略

在备库配置RMAN定时清理脚本,自动删除已应用归档:

代码语言:javascript
复制
crosscheck archivelog all;
delete noprompt archivelog all completed before 'sysdate-5' applied on standby;

配合crontab每日定时执行。

3. ADG传输断连兜底配置

主库配置REOPEN参数,链路恢复后自动重试传输:

代码语言:javascript
复制
altersystemset log_archive_dest_2='service=ycjj2dg ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ycjj2dg REOPEN=30';

4. 扩容规划

若业务归档增长快,提前扩容备库归档存储,划分独立磁盘存放归档文件,避免和系统盘、数据盘共用空间。


6、补充风险提示

  1. 若清理磁盘时误删未应用归档:备库存在日志缺口,MRP进程无法继续恢复,需要从主库重新传输缺失归档或重建物理备库;
  2. 若空间释放后DG仍报ORA-16778:检查防火墙、端口、redo传输加密、密码文件一致性;
  3. MaxPerformance异步模式下,主库不会阻塞业务,但长期断连会导致主库归档堆积,主库磁盘同样有写满风险,需同步监控主库归档磁盘。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ByteHouse 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.故障
  • 2.错误说明
  • 3.故障排查
  • 4. 紧急恢复步骤
    • 步骤1:清理备库磁盘,释放存储空间
    • 步骤2:校验主备库监听、tns连通性
    • 步骤3:重置DG错误状态,恢复Redo传输
      • 方式1:DGMGRL清除数据库错误
      • 方式2:主库手动重启Redo传输进程
    • 步骤4:验证ADG同步恢复正常
  • 5.长期预防方案
    • 1. 磁盘容量监控告警
    • 2. 归档自动清理策略
    • 3. ADG传输断连兜底配置
    • 4. 扩容规划
  • 6、补充风险提示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档