Oracle ADG 日常巡检指南

发布于:2025-06-12 ⋅ 阅读:(17) ⋅ 点赞:(0)

一、基础状态检查
  1. 数据库角色与模式

    SELECT db_unique_name, open_mode, database_role, switchover_status 
    FROM v$database;
    

    预期状态

    • 主库:OPEN_MODE=READ WRITE, DATABASE_ROLE=PRIMARY
    • 备库:OPEN_MODE=READ ONLY WITH APPLY, DATABASE_ROLE=PHYSICAL STANDBY
  2. ADG配置有效性

    SHOW PARAMETER log_archive_dest_2;        -- 检查归档目标状态
    SHOW PARAMETER log_archive_config;        -- 检查DG配置
    

二、日志同步健康检查
  1. 主备库归档一致性

    -- 主备库均执行:
    SELECT THREAD#, MAX(SEQUENCE#) 
    FROM v$archived_log 
    WHERE resetlogs_change# = (SELECT resetlogs_change# FROM v$database_incarnation WHERE status='CURRENT') 
    GROUP BY THREAD#;
    

    要求:主备库的MAX(SEQUENCE#)差值应≤1(允许轻微延迟)。

  2. 检查GAP缺口

    -- 备库执行:
    SELECT * FROM v$archive_gap;  -- 有返回结果说明存在GAP
    

    处理方案

    • 若返回THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE#,需从主库拷贝缺失归档到备库并注册:
      ALTER DATABASE REGISTER PHYSICAL LOGFILE '/path/to/archive_log_seq90.arc';
      
  3. 传输与应用延迟监控

    -- 备库执行:
    SELECT name, value, time_computed 
    FROM v$dataguard_stats 
    WHERE name IN ('transport lag', 'apply lag');
    

    阈值建议transport lag(传输延迟)与apply lag(应用延迟)均需 ≤ 5分钟。


三、进程与错误监控
  1. 关键进程状态

    SELECT process, status, sequence#, thread# 
    FROM v$managed_standby;
    

    关键进程说明

    进程 主库角色 备库角色 正常状态
    LNS 存在 不存在 WRITING
    MRP0 不存在 存在 APPLYING_LOG

    异常状态处理

    • MRP0状态为WAIT_FOR_GAP:检查是否存在归档缺口(参考第二节)。
    • MRP0状态为WAIT_FOR_LOG:主库日志传输异常。
  2. 归档传输错误

    -- 主库执行:
    SELECT dest_name, status, error 
    FROM v$archive_dest_status 
    WHERE dest_id = 2;  -- 对应备库的归档目标
    

    严重错误STATUS=ERRORERROR字段非空(如ORA-12170网络超时)。


四、常见问题定位
  1. 未应用日志检查(备库)

    SELECT thread#, COUNT(*) 
    FROM v$archived_log 
    WHERE applied='NO' 
    GROUP BY thread#;
    

    处理:若积压持续增长,检查MRP0进程是否停滞。

  2. 日志传输阻塞(主库)

    -- 主库检查未发送日志量:
    WITH arch AS (SELECT thread#, MAX(sequence#) arch_seq FROM gv$managed_standby WHERE process='ARCH' GROUP BY thread#),
         lns  AS (SELECT thread#, MAX(sequence#) lns_seq  FROM gv$managed_standby WHERE process='LNS'  GROUP BY thread#)
    SELECT a.thread#, l.lns_seq - a.arch_seq AS unsent_logs
    FROM arch a, lns l
    WHERE a.thread# = l.thread#;
    

    阈值unsent_logs > 10 需排查网络或存储性能。

  3. 归档删除策略
    重要原则

    • 禁止在备库强制删除未应用的归档(DELETE FORCE)!
    • 若备库空间不足:
      -- 主库临时停止传输(缓解压力):
      ALTER SYSTEM SET log_archive_dest_state_2=DEFER; 
      -- 空间释放后恢复:
      ALTER SYSTEM SET log_archive_dest_state_2=ENABLE;
      

五、巡检总结清单
类别 检查项 频率 异常处理
基础状态 数据库角色与模式 每日 检查switchover_status
日志同步 归档序列一致性 每小时 补注册缺失归档
日志同步 传输与应用延迟 每小时 监控v$dataguard_stats
进程健康 LNS/MRP0进程状态 每小时 重启进程或排查GAP
错误监控 归档传输错误 每日 检查网络/存储日志
空间管理 归档未应用量 每日 避免强制删除,主库暂断传输

关键提示

  • 主备切换(Switchover/Failover)后必须重新验证所有巡检项。
  • 发现UNRESOLVABLE GAP需立即人工干预。
  • 备库的_system_trig_enabled参数应为FALSE(避免触发器重复执行)。

附:进程状态速查表

MRP0状态 含义 紧急度
APPLYING_LOG 正常应用日志 正常
WAIT_FOR_GAP 等待缺失日志 警告
WAIT_FOR_LOG 等待新日志传输 警告
NOT ALLOWED 配置错误/角色异常 严重