暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

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

原创 ByteHouse 2天前
91

1.故障

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

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

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

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

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

  1. 主库测试访问备库TNS
-- 主库sqlplus select sysdate from dual@ycjj2dg;
  1. 备库测试访问主库TNS
-- 备库sqlplus select sysdate from dual@ycjj;

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

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

方式1:DGMGRL清除数据库错误

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传输进程

-- 主库执行 alter system set log_archive_dest_state_2 = defer; alter system switch logfile; alter system set log_archive_dest_state_2 = enable; alter system switch logfile;

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

  1. DGMGRL查看整体状态
DGMGRL> show configuration

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

  1. 查看主库Redo传输状态
select dest_id,status,error from v$archive_dest where dest_id=2;

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

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

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


5.长期预防方案

1. 磁盘容量监控告警

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

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

2. 归档自动清理策略

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

crosscheck archivelog all;
delete noprompt archivelog all completed before 'sysdate-5' applied on standby;

配合crontab每日定时执行。

3. ADG传输断连兜底配置

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

alter system set 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异步模式下,主库不会阻塞业务,但长期断连会导致主库归档堆积,主库磁盘同样有写满风险,需同步监控主库归档磁盘。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论