核心看网络延迟和业务容灾等级:跨公网或RTT>10ms时须用级联备库防LNS超时与ORA-16724;同步备库仅适用于同城双中心(RTT<5ms)。
如何判断该用级联备库还是同步备库
核心看两点:网络延迟和业务容灾等级。如果主库到远端备库跨公网或高延迟(rtt > 10ms),直接建物理备库会频繁 lns 超时、arch 归档堆积,甚至触发 ora-16724(无法解析远程归档目标)。这时必须走级联——让本地低延迟备库充当中继,再转发 redo 给远端。而同步备库(sync)只适合同城双中心(rtt commit wait 或 redo transport 级别为 sync + affirm,否则主库提交不等备库写入就返回,等于没同步。
- 同步备库要求主库
LOG_ARCHIVE_DEST_2中必须含SYNC AFFIRM和VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) - 级联备库本身必须是
PHYSICAL STANDBY,且开启LOG_ARCHIVE_DEST_STATE_n=ENABLE和LOG_ARCHIVE_CONFIG='DG_CONFIG=(primary,standby1,cascade1)' - 级联链路上所有节点的
DB_UNIQUE_NAME必须全局唯一,且在各端LOG_ARCHIVE_CONFIG中显式列出
配置级联备库时最容易漏掉的三件事
级联不是“主→备1→备2”连起来就行,中间节点(即备1)要主动承担中继角色,否则 redo 停在它那儿不动。常见现象是备2的 V$ARCHIVED_LOG 不增长,SELECT STATUS, GAP_STATUS FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID=3 返回 ERROR 或 DEFERRED。
- 在级联中继节点(备1)上执行:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='SERVICE=cascade1 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=cascade1' SCOPE=BOTH;—— 注意这里SERVICE指向的是下一级备库的 TNS 名,不是主库的 - 中继节点必须启用
FAL_SERVER指向主库(用于拉取缺失日志),同时自身也要被下游(备2)设为FAL_SERVER;否则断网恢复后 gap 无法自动填补 - 中继节点的
STANDBY_FILE_MANAGEMENT=AUTO必须打开,否则新增数据文件不会自动传播到备2
同步备库的 COMMIT 性能影响怎么量化
开 SYNC AFFIRM 后,每个事务 commit 实际变成“主库写本地 online log + 网络发 redo + 备库落盘 + 主库收到确认”四步串行。实测中,当网络 RTT 为 2ms 时,单次 commit 延迟增加约 3–5ms;RTT 到 8ms,延迟常突破 15ms,OLTP 类应用吞吐明显下降。这不是 Oracle 的 bug,是两阶段提交协议的固有代价。
- 可通过
V$DATAGUARD_STATS查看transport lag和apply lag,但注意它们反映的是平均值,突发大事务仍可能卡住前台 - 若必须用同步但又怕性能抖动,可改用
SYNC NOAFFIRM:主库只等网络发出,不等备库落盘,但此时存在极小概率(断电瞬间)丢失已确认事务 - 不要在
LOG_ARCHIVE_DEST_n中混用SYNC和ASYNC到同一备库,Oracle 不允许,会报ORA-16026
多个备库共存时的归档目标管理陷阱
一个主库最多支持 31 个 LOG_ARCHIVE_DEST_n,但并非全开就稳。问题常出在归档路径冲突和状态误判:比如 DEST_ID=2 配了同步备库,DEST_ID=3 配了级联中继,但两者都指向同一个 DB_UNIQUE_NAME,Oracle 会静默忽略后者,导致级联链路失效;或者某备库临时宕机,LOG_ARCHIVE_DEST_STATE_n 还是 ENABLE,主库持续重试并阻塞归档进程(ARCH 进程 hang 住)。
- 每个
LOG_ARCHIVE_DEST_n的DB_UNIQUE_NAME值必须与目标库实际DB_UNIQUE_NAME完全一致(区分大小写),可用SELECT DB_UNIQUE_NAME FROM V$DATABASE核对 - 备库不可达时,应立刻执行:
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_n=DEFER,而不是等它自动超时;否则主库 alert 日志刷满ORA-16057错误 - 用
DGMGRL管理多备库比纯 SQL 更可靠:EDIT DATABASE 'standby1' SET PROPERTY 'LogXptMode'='SYNC';会自动校验依赖关系,避免手写参数出错
LOG_ARCHIVE_DEST 和 FAL 方向容易设反。稍不注意,redo 就卡在半路,而监控指标看起来一切正常。


















