Oracle Data Guard Redo 传输详解
Oracle Data Guard Redo 传输详解
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Redo 传输是 Data Guard 的核心[1]:
2. 传输模式
2.1 SYNC(同步)
- LGWR 直接写 Standby Redo Log
- 主库等待备库确认
- 零数据丢失
- 性能影响
2.2 ASYNC(异步)
- LGWR 异步发送
- 不等待确认
- 可能数据丢失
- 高性能
2.3 FASTSYNC
- SYNC 但不等待写盘
- 网络确认即可
- 折中
3. 进程
3.1 主库
- LGWR:写 Online Redo
- LNS(NSS):发送到备库
- ARCH:归档
3.2 备库
- RFS:接收 Redo
- MRP:应用 Redo(物理备库)
- LSP:应用 Redo(逻辑备库)
4. 配置
4.1 LOG_ARCHIVE_DEST_n
-- SYNC
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 =
'SERVICE=stby1 SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stby1';
-- ASYNC
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 =
'SERVICE=stby1 ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=stby1';
4.2 属性
- SYNC/ASYNC:传输模式
- AFFIRM/NOAFFIRM:是否确认写盘
- NET_TIMEOUT:网络超时
- REOPEN:重试间隔
- MAX_FAILURE:最大失败次数
- COMPRESSION:压缩
4.3 Standby Redo Log
-- 备库
ALTER DATABASE ADD STANDBY LOGFILE GROUP 10
('/u01/oradata/srl01.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 11
('/u01/oradata/srl02.log') SIZE 50M;
-- 至少比 Online Redo 多一组
5. Redo Routes(12c+)
5.1 配置
DGMGRL> EDIT DATABASE prod SET PROPERTY 'RedoRoutes' =
'(stby1 : SYNC, stby2 : ASYNC)';
5.2 Far Sync
DGMGRL> EDIT DATABASE prod SET PROPERTY 'RedoRoutes' =
'(far_sync : SYNC)';
DGMGRL> EDIT FAR_SYNC far_sync SET PROPERTY 'RedoRoutes' =
'(stby1 : ASYNC)';
详细见:Oracle Active Data Guard 详解。
6. 传输状态
6.1 主库
SELECT dest_id, status, error, gap_status
FROM v$archive_dest_status
WHERE dest_id = 2;
SELECT * FROM v$archive_dest;
6.2 备库
SELECT process, status, sequence#, block#, blocks
FROM v$managed_standby;
SELECT * FROM v$standby_log;
6.3 Gap
SELECT * FROM v$archive_gap;
7. Gap 解决
7.1 检查
SELECT * FROM v$archive_gap;
-- thread#, low_sequence#, high_sequence#
7.2 传输
# 主库
RMAN> BACKUP AS COPY ARCHIVELOG SEQUENCE 123 THREAD 1
FORMAT '/tmp/arc_%t_%s_%r.arc';
# 传输到备库
scp /tmp/arc_*.arc stby:/tmp/
7.3 注册
-- 备库
ALTER DATABASE REGISTER PHYSICAL LOGFILE '/tmp/arc_xxx.arc';
7.4 自动
- FAL_SERVER
- FAL_CLIENT
- 自动 Gap 解决
ALTER SYSTEM SET FAL_SERVER = 'prod';
ALTER SYSTEM SET FAL_CLIENT = 'stby1';
8. 网络优化
8.1 SDU
# sqlnet.ora
DEFAULT_SDU_SIZE = 32767
8.2 SEND/RECV
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 =
'SERVICE=stby1 SYNC SEND_BUF_SIZE=1048576 RECV_BUF_SIZE=1048576 ...';
8.3 压缩
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 =
'SERVICE=stby1 ASYNC COMPRESSION=ENABLE ...';
9. 监控
9.1 Lag
SELECT name, value, time_computed
FROM v$dataguard_stats
WHERE name LIKE '%lag%';
9.2 历史
SELECT * FROM v$standby_event_histogram
WHERE name = 'apply lag';
9.3 错误
SELECT dest_id, error, status
FROM v$archive_dest_status
WHERE status != 'VALID';
10. 保护模式
10.1 Maximum Protection
- SYNC + AFFIRM
- 备库故障主库停
- 零数据丢失
10.2 Maximum Availability
- SYNC + AFFIRM
- 备库故障主库继续(降级)
- 零数据丢失(备库可用时)
10.3 Maximum Performance
- ASYNC + NOAFFIRM
- 高性能
- 可能数据丢失
详细见:Oracle Data Guard Switchover 与 Failover 详解。
11. 应用场景
11.1 同城灾备
- SYNC
- 零数据丢失
- 低延迟
11.2 异地灾备
- ASYNC
- 高性能
- Far Sync
11.3 多备库
- 1 主多备
- 不同保护级别
- Redo Routes
12. 常见坑与排错
12.1 ORA-12154
- TNS 配置
- 检查 tnsnames.ora
12.2 ORA-16198
- Standby Redo Log 满
- 增加组数
12.3 Lag 大
- 网络
- 磁盘
- 优化
13. 最佳实践
- Standby Redo Log:必须
- SYNC/ASYNC 选择:场景
- FAL_SERVER:自动 Gap
- 网络优化:SDU/Buffer
- 压缩:远距离
- 监控 Lag:及时
- Gap 解决:自动 + 手动
- 测试:Failover
- 文档:配置
- 监控:告警
14. 参考资料
[1] Oracle Data Guard Concepts and Administration 19c, “Redo Transport” https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/