普通网友 2025-10-19 04:45 采纳率: 98.6%
浏览 2
已采纳

主备库密码不同步导致DG同步失败

主备库密码不同步导致DG同步失败的常见问题是:在Oracle Data Guard环境中,主库修改SYS用户密码后未同步更新备库的密码文件,导致Redo Apply进程无法通过身份验证,日志应用中断。由于DG依赖密码文件进行主备库间的sysdba权限认证,一旦主备密码不一致,即使网络和归档配置正常,也会出现ORA-16191: Primary log shipping client not logged in with SYSDBA privilege错误,最终造成数据同步停滞,影响高可用性。
  • 写回答

1条回答 默认 最新

  • 小小浏 2025-10-19 04:46
    关注

    1. 问题背景与现象描述

    在Oracle Data Guard(DG)架构中,主库(Primary Database)与备库(Standby Database)之间通过Redo Apply机制实现数据同步。当DBA在主库上执行ALTER USER SYS IDENTIFIED BY <new_password>;操作后,若未同步更新备库的密码文件(orapwd file),将直接导致备库无法验证来自主库的SYSDBA连接请求。

    典型报错信息出现在备库的告警日志(alert log)中:

    ORA-16191: Primary log shipping client not logged in with SYSDBA privilege
    P000: failed to establish connection as 'SYS' (error = 16191)
    

    此时,尽管网络通信正常、归档路径配置无误,Redo传输进程(如LNS或NSS)仍会中断,造成日志应用停滞,影响数据库高可用性与灾难恢复能力。

    2. 技术原理深度剖析

    Data Guard依赖于密码文件进行跨实例的身份认证,尤其是在使用SYSDBA权限进行Redo日志传输时。以下是关键点分析:

    • 密码文件存储在$ORACLE_HOME/dbs目录下,文件名为orapw<SID>
    • 主库向备库发送Redo数据前,需以SYS用户身份建立加密连接,并通过密码文件验证其拥有SYSDBA权限。
    • 该过程不依赖数据库字典表中的密码,而是完全基于外部密码文件内容。
    • 一旦主库修改了SYS密码但未重建或复制新的密码文件到备库,两者密码哈希值不一致,认证失败。
    • 即使使用了OS认证或远程登录配置,若未正确设置REMOTE_LOGIN_PASSWORDFILE参数,也会加剧此问题。

    因此,密码文件的一致性是保障DG稳定运行的核心前提之一。

    3. 故障诊断流程图

    graph TD
        A[备库Redo Apply中断] --> B{检查告警日志}
        B --> C[是否存在ORA-16191?]
        C -->|是| D[确认主库近期是否修改SYS密码]
        C -->|否| E[转向其他原因排查]
        D --> F[比对主备库密码文件大小和修改时间]
        F --> G[使用orapwd工具导出哈希对比]
        G --> H[判断是否一致]
        H -->|否| I[确定为密码不同步问题]
        H -->|是| J[排除此项,继续深入]
    

    4. 常见解决方案与操作步骤

    步骤操作内容命令示例
    1在主库生成新密码文件orapwd file='$ORACLE_HOME/dbs/orapwORCL' format=12 password=newpass entries=10 force=y
    2停止备库相关进程ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
    3安全拷贝密码文件至备库scp orapwORCL oracle@standby:/u01/app/oracle/product/19.0.0/dbhome_1/dbs/
    4验证备库密码文件权限chmod 600 orapwORCL; chown oracle:oinstall orapwORCL
    5重启备库MRP进程ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
    6监控alert log确认恢复tail -f /u01/app/oracle/diag/rdbms/stby/ORCL/trace/alert_ORCL.log
    7验证V$DATAGUARD_STATSSELECT name, value FROM v$dataguard_stats WHERE name LIKE '%lag%';
    8启用密码文件自动同步(可选)ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORCL,STBY), AUTO_SYNC=YES';
    9定期巡检脚本加入密码文件校验Shell脚本md5sum比对
    10文档化变更流程纳入ITIL变更管理流程

    5. 高级运维建议与最佳实践

    针对大型企业级环境,仅解决单次故障不足以构建稳健的Data Guard体系。以下是从架构层面提出的扩展建议:

    1. 实施自动化密码文件同步机制,在每次密码变更后触发Ansible/Puppet脚本分发。
    2. 启用FORCE LOGGINGGUARANTEE FLASHBACK增强数据一致性保障。
    3. 配置DGMGRL统一管理DG配置,利用ENABLE CONFIGURATION自动检测此类异常。
    4. 使用Oracle Enterprise Manager Cloud Control设置阈值告警,监控Transport LagApply Lag
    5. 建立标准化运维手册,明确“任何SYS密码变更必须同步至所有Data Guard节点”。
    6. 考虑启用Transparent Data Encryption (TDE) + Wallet管理,提升整体安全性。
    7. 在多站点DG部署中,采用FAR SYNC Instance减少主库压力,同时隔离认证风险。
    8. 定期演练Failover场景,确保密码不一致不会成为切换瓶颈。
    9. 审计V$PWFILE_USERS视图,确保仅有必要用户具备SYSDBA权限。
    10. 结合OS-Level监控工具(如Prometheus+Node Exporter)采集密码文件mtime指标。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月20日
  • 创建了问题 10月19日