Oracle Active Data Guard 详解
Oracle Active Data Guard 详解
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Active Data Guard 允许备库在 READ ONLY 模式下同时应用 Redo 日志[1]:
2. ADG 特性
2.1 Real-Time Query
- 备库 READ ONLY
- 同时应用 Redo
- 实时查询
- Active Standby
2.2 Automatic Block Repair
- 主库坏块
- 自动从备库修复
- 透明
2.3 Far Sync
- 零数据丢失远程
- 轻量级
- 多地灾备
2.4 DML Redirection
- 19c+
- 备库 DML 重定向主库
- 只读应用
3. 启用 ADG
3.1 备库配置
-- 启动实时应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
-- 打开 READ ONLY
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
3.2 验证
SELECT open_mode, database_role, protection_mode
FROM v$database;
-- READ ONLY WITH APPLY, PHYSICAL STANDBY
SELECT process, status, sequence# FROM v$managed_standby;
-- MRP0, APPLYING_LOG
4. Real-Time Query
4.1 查询
-- 备库查询
SELECT COUNT(*) FROM employees;
-- 实时数据(与主库同步)
4.2 应用分离
- 报表 → 备库
- 读写 → 主库
- 减轻主库压力
4.3 一致性
- 会话级读一致性
- Flashback 查询
- Standby 阻塞主库(特定场景)
5. Automatic Block Repair
5.1 触发
- 主库坏块(ORA-01578)
- 自动从备库读取
- 修复主库
- 应用无感知
5.2 配置
-- 自动启用
-- 物理 standby
-- 不需额外配置
5.3 验证
SELECT * FROM v$database_block_corruption;
6. Far Sync
6.1 架构
Primary → Far Sync (SYNC) → Remote Standby (ASYNC)
- Far Sync 仅传 Redo
- 零数据丢失
- 远距离
6.2 配置
-- Far Sync 实例
CREATE CONTROLFILE AS STANDBY ...;
-- 仅控制文件 + SPFILE
-- 无数据文件
6.3 Redo 路由
DGMGRL> EDIT DATABASE prod SET PROPERTY 'RedoRoutes' = '(far_sync : SYNC)';
DGMGRL> EDIT FAR_SYNC far_sync SET PROPERTY 'RedoRoutes' = '(stby1 : ASYNC)';
7. DML Redirection
7.1 启用
-- 19c+
ALTER SESSION ENABLE ADG_REDIRECT_DML;
7.2 工作原理
- 备库执行 DML
- 重定向到主库
- 主库执行
- Redo 同步回备库
7.3 应用
- 只读应用偶尔写
- 简化应用
- 性能有损耗
8. 角色
8.1 Standby 角色
-- 物理备库
-- Active Standby(READ ONLY + APPLY)
-- Snapshot Standby
8.2 切换
- Switchover
- Failover
- 应用连接服务
详细见:Oracle Data Guard Switchover 与 Failover 详解。
9. 服务名
9.1 角色
prod_rw = 主库
prod_ro = 备库
9.2 TAF
# tnsnames.ora
prod =
(DESCRIPTION =
(FAILOVER = ON)
(ADDRESS_LIST = ...)
(CONNECT_DATA = (SERVICE_NAME = prod_rw))
)
9.3 Broker 配置
DGMGRL> EDIT DATABASE prod SET PROPERTY 'StaticConnectIdentifier' = ...;
DGMGRL> EDIT DATABASE stby1 SET PROPERTY 'StaticConnectIdentifier' = ...;
10. 监控
10.1 同步延迟
SELECT name, value, time_computed
FROM v$dataguard_stats
WHERE name IN ('transport lag', 'apply lag');
10.2 进程
SELECT process, status, sequence#, block#, blocks
FROM v$managed_standby;
10.3 性能
SELECT * FROM v$standby_event_histogram;
11. 应用场景
11.1 读分离
- 报表 → 备库
- 查询 → 备库
- 主库专注写
11.2 HA
- 主库故障
- Fast-Start Failover
- 备库变主库
11.3 DR
- 异地
- 零数据丢失
- Far Sync
11.4 升级
- 滚动升级
- 降级升级
- 最小停机
12. 常见坑与排错
12.1 Lag 大
- 网络
- 磁盘 I/O
- 性能调优
12.2 Active Standby 卡
- 长查询阻塞
- 调整
12.3 坏块修复
- Automatic Block Repair
- 检查
- 手动修复
13. 最佳实践
- 读分离:报表
- Far Sync:远距离
- Fast-Start Failover:HA
- 监控 Lag:及时
- 服务名:角色
- TAF:连接
- 升级:滚动
- 测试:Failover
- 监控:状态
- 文档:流程
14. 参考资料
[1] Oracle Active Data Guard 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/