Oracle Data Guard 架构详解
Oracle Data Guard 架构详解
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Data Guard 是 Oracle 灾备方案[1]:
类型:
- 物理 Standby
- 逻辑 Standby
- Snapshot Standby
- Far Sync
详细见:Oracle Data Guard 部署。
2. 架构
2.1 主库
- Primary
- 读写
- Redo 产生
2.2 备库
- Standby
- 物理:块级一致
- 逻辑:SQL 应用
2.3 角色
- Primary:主
- Standby:备
- 可切换
3. 数据保护模式
3.1 Maximum Protection
- 零数据丢失
- SYNC
- 备库失败主库停
3.2 Maximum Availability
- 零数据丢失(最佳)
- SYNC
- 备库失败主库继续
3.3 Maximum Performance
- 最大性能
- ASYNC
- 数据可能丢失
3.4 设置
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
4. Redo 传输
4.1 SYNC
- 同步
- 主库等备库确认
- 零丢失
4.2 ASYNC
- 异步
- 主库不等
- 性能好
4.3 配置
ALTER SYSTEM SET log_archive_dest_2 =
'service=standby sync valid_for=(online_logfiles,primary_role) db_unique_name=standby'
SCOPE=BOTH;
5. 物理 Standby
5.1 创建
-- 1. 主库准备
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE FORCE LOGGING;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 11 ('...') SIZE 200M;
-- 2. 参数
ALTER SYSTEM SET log_archive_config = 'dg_config=(orcl,orcldg)';
ALTER SYSTEM SET log_archive_dest_2 = 'service=orcldg async ...';
-- 3. RMAN Duplicate
rman target sys/pwd@orcl auxiliary sys/pwd@orcldg
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER NOFILENAMECHECK;
-- 4. 启动 MRP
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION USING CURRENT LOGFILE;
5.2 应用
- Redo Apply
- MRP(Managed Recovery Process)
- 物理块级
5.3 Active Data Guard
- 11g+
- 只读 + 应用
- 实时查询
6. 逻辑 Standby
6.1 创建
-- 类似物理
-- 但使用 SQL Apply
ALTER DATABASE START LOGICAL STANDBY APPLY;
6.2 应用
- SQL Apply
- LogMiner
- 转换 SQL
- 执行
6.3 限制
- 数据类型限制
- 不支持对象
- 需要主键
7. Snapshot Standby
7.1 转换
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE CONVERT TO SNAPSHOT STANDBY;
7.2 用途
- 读写测试
- 临时
- 恢复后同步
7.3 恢复
ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
8. Far Sync
8.1 概述
- 12c+
- 远距离零丢失
- 中继实例
8.2 架构
Primary → Far Sync (SYNC) → Standby (ASYNC)
8.3 优势
- 零数据丢失
- 远距离
- 性能好
9. 切换
9.1 Switchover
- 计划
- 主备互换
- 无数据丢失
-- 主库
ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY WITH SESSION SHUTDOWN;
-- 备库
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE OPEN;
9.2 Failover
- 故障
- 备库变主
- 可能数据丢失
-- 备库
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
ALTER DATABASE ACTIVATE STANDBY DATABASE;
9.3 Reinstate
- 12c+
- 失败主库恢复为备
DGMGRL> reinstate database orcl;
10. Data Guard Broker
10.1 配置
# 启用
ALTER SYSTEM SET dg_broker_start = TRUE;
# DGMGRL
dgmgrl sys/Oracle123@orcl
CREATE CONFIGURATION dg_config AS PRIMARY DATABASE IS orcl CONNECT IDENTIFIER IS orcl;
ADD DATABASE orcldg AS CONNECT IDENTIFIER IS orcldg MAINTAINED AS PHYSICAL;
ENABLE CONFIGURATION;
10.2 管理
SHOW CONFIGURATION;
SHOW DATABASE orcl;
SHOW DATABASE orcldg;
EDIT DATABASE orcldg SET PROPERTY LogXptMode = 'SYNC';
EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
SWITCHOVER TO orcldg;
FAILOVER TO orcldg;
11. Standby Redo Log
11.1 创建
ALTER DATABASE ADD STANDBY LOGFILE GROUP 11
('/u01/oradata/stdby_redo11.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 12
('/u01/oradata/stdby_redo12.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 13
('/u01/oradata/stdby_redo13.log') SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 14
('/u01/oradata/stdby_redo14.log') SIZE 200M;
11.2 优势
- 实时应用
- 零丢失
- Active Data Guard
详细见:Oracle Redo 日志配置与管理。
12. 监控
12.1 v$archive_dest
SELECT dest_id, status, destination, error
FROM v$archive_dest WHERE dest_id <= 5;
12.2 v$archive_dest_status
SELECT
dest_id, database_mode,
recovery_mode,
archived_seq#, applied_seq#
FROM v$archive_dest_status;
12.3 v$dataguard_status
SELECT facility, severity, message, timestamp
FROM v$dataguard_status
ORDER BY timestamp DESC;
12.4 进度
-- 主库
SELECT thread#, sequence#, archived, status FROM v$log;
-- 备库
SELECT thread#, sequence#, applied, status
FROM v$archived_log ORDER BY sequence# DESC;
12.5 Gap
SELECT * FROM v$archive_gap;
13. 性能优化
13.1 Redo 传输
- 网络带宽
- ASYNC
- Net Timeout
13.2 应用
- Parallel
- SGA
- 备库性能
14. 常见坑与排错
14.1 Gap
- 归档缺失
- FIND_GAP
- 手动传输
- REGISTER
14.2 ORA-16191
- SYS 密码不一致
- 密码文件同步
14.3 ORA-12154
- 网络问题
- tnsnames
- 监听
15. 最佳实践
- 物理 Standby:简单
- Active Data Guard:实时查询
- Maximum Availability:平衡
- SYNC:关键业务
- Standby Redo Log:实时
- Broker:管理
- Far Sync:远距离
- 监控 Gap:及时
- 测试切换:可行
- 文档化:DR 计划
16. 参考资料
[1] Oracle Data Guard Concepts and Administration 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/dgbkr/