最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Oracle Data Guard如何配置异步日志传输
时间:2026-08-24 09:50:49 编辑:袖梨 来源:一聚教程网
最大性能模式必须显式配置LOG_ARCHIVE_DEST_n为ASYNC,漏写或误配SYNC会导致主库降级运行;需结合V$ARCHIVE_DEST_STATUS中TRANSMIT_MODE=ASYNC且STATUS=VALID验证,同时注意Broker会覆盖手动配置。
LOG_ARCHIVE_DEST_n 必须显式指定 ASYNC
最大性能模式下,异步日志传输不是默认“开启”,而是依赖 LOG_ARCHIVE_DEST_n 中明确写出 ASYNC。漏写或误写为 SYNC 会导致主库实际运行在最高可用甚至最大保护模式,事务提交变慢甚至挂起。
常见错误配置:LOG_ARCHIVE_DEST_2='SERVICE=standby_db SYNC ...' 或 LOG_ARCHIVE_DEST_2='SERVICE=standby_db ...'(省略传输模式)。Oracle 12c 及以后版本中,ASYNC 是默认值,但仅当未指定 SYNC 或 LGWR 时才生效;一旦显式写了 LGWR,就必须同时指定 ASYNC 或 SYNC,否则报错 ORA-16025。
-
LGWR ASYNC和ARCH ASYNC都合法,但行为不同:前者由 LGWR 触发 LNS 进程实时推送重做流,后者等 ARCn 归档完成后才传归档文件 - 若用
LGWR,必须配STANDBY_REDO_LOGS,否则备库 RFS 写入失败,日志积压在主库 SGA 中 -
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)必须匹配主库角色和日志类型,写成(STANDBY_LOGFILES,STANDBY_ROLE)会导致主库根本不发日志 -
DB_UNIQUE_NAME值需与备库实际DB_UNIQUE_NAME完全一致(区分大小写),否则ALTER SYSTEM SWITCH LOGFILE后查V$ARCHIVE_DEST_STATUS显示STATUS = INVALID
如何验证异步传输真正在跑
只看参数配置不可靠。主库上执行 SELECT DEST_ID, STATUS, TRANSMIT_MODE, SYNCHRONIZATION_STATUS FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID = 2;,关键字段必须同时满足:
-
TRANSMIT_MODE返回ASYNC(不是SYNC或空) -
STATUS为VALID(不是ERROR或DEFERRED) -
SYNCHRONIZATION_STATUS为NOT SYNCHRONIZED或SYNCHRONIZED均可,但不能是FAILED
备库上运行 SELECT PROCESS, STATUS, THREAD#, SEQUENCE# FROM V$MANAGED_STANDBY;,至少应看到 RFS 状态为 IDLE 或 ACTIVE;若启用了实时应用,还应有 MRP0;若只有 ARCH 进程在运行,说明主库走的是 ARCH 传输路径,不是 LGWR。
REOPEN 和 MAX_FAILURE 对异步链路稳定性的影响
网络抖动或备库短暂不可达时,LOG_ARCHIVE_DEST_n 若未设重试机制,会快速进入 ERROR 状态并停止发送,导致归档堆积。这不是异步模式失效,而是配置缺失。
推荐加上重试控制:
-
REOPEN=60:失败后每 60 秒重试一次(默认 300 秒,太长) -
MAX_FAILURE=3:最多连续失败 3 次后暂停,避免无意义刷日志 - 示例完整配置:
LOG_ARCHIVE_DEST_2='SERVICE=standby_db LGWR ASYNC REOPEN=60 MAX_FAILURE=3 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_db'
注意:REOPEN 优先级高于 ALTERNATE;若同时配置,先重试主路径,失败达 MAX_FAILURE 次后才切备用路径。
Data Guard Broker 会覆盖手动配置
如果启用 Broker(dgmgrl),所有保护模式和传输模式均由 Broker 统一管理。此时手动修改 LOG_ARCHIVE_DEST_n 中的 ASYNC 不生效,Broker 会按 EDIT DATABASE ... SET PROPERTY LogXptMode='ASYNC' 的值强制覆盖。
检查是否启用 Broker:
- 查
V$DATAGUARD_CONFIG,若有记录则 Broker 已启用 - 运行
dgmgrl /,输入SHOW CONFIGURATION,若返回配置信息即确认启用 - Broker 下验证模式应使用
SHOW DATABASE VERBOSE "primary_db",看LogXptMode字段是否为ASYNC
混用 Broker 和手动参数极易引发冲突,尤其在 switchover 后部分参数被 Broker 自动重写,而 DBA 仍按旧配置排查问题——这是最常被忽略的复杂点。