Oracle Data Guard 是什么?物理备库和逻辑备库有什么区别?
简化版
Data Guard 是 Oracle 的主备容灾方案,通过传输和应用 Redo 把主库变更同步到备库。物理备库基于块级恢复,结构和主库几乎一致;逻辑备库把 Redo 转换为 SQL 应用,灵活但兼容性和延迟更复杂。面试重点是保护模式、日志传输、Redo Apply、Switchover 和 Failover。
详细版
Data Guard 常用于容灾和高可用。主库产生 Redo,传输到备库,备库应用日志保持同步。
核心概念:
- Primary Database:主库,对外提供写服务。
- Standby Database:备库,接收并应用日志。
- Physical Standby:物理备库,块级一致。
- Logical Standby:逻辑备库,SQL Apply。
- Switchover:计划内主备切换。
- Failover:主库故障后的故障切换。
它和 RAC 不同:RAC 解决同城多实例访问同一数据库,Data Guard 更偏跨机房容灾和主备复制。
完整版教学
一、Data Guard 解决的是容灾复制
单机数据库再稳定,也无法避免机房故障、存储故障、误操作等风险。Data Guard 的目标是准备一个或多个备库,在主库故障时能接管业务。
它的基本流程是:主库产生 Redo,传输到备库,备库应用 Redo,让备库持续追赶主库。
Primary -> Redo Transport -> Standby -> Redo Apply
记忆钩子:Data Guard 的核心不是“复制表”,而是“传输和应用 Redo”。
二、物理备库是最常见形态
物理备库通过 Redo Apply 保持和主库块级一致。它的数据文件结构和主库基本相同,恢复可靠性和兼容性好,是生产容灾中最常见的模式。
物理备库可以用于灾备,也可以在某些模式下承担读查询,减轻主库压力。但读写能力和授权能力要结合具体部署和版本能力评估。
物理备库的优点是简单可靠,缺点是灵活性较弱,因为它几乎就是主库的物理副本。
三、逻辑备库更灵活但更复杂
逻辑备库会把 Redo 转换为 SQL 语句应用到备库。因为是逻辑层应用,它可以允许备库有一些不同对象或额外索引,也可能用于报表和迁移场景。
但 SQL Apply 对数据类型、对象类型和特性兼容性更敏感,延迟和冲突处理也更复杂。
| 类型 | 应用方式 | 优点 | 风险 |
|---|---|---|---|
| 物理备库 | Redo Apply | 可靠、块级一致 | 灵活性较弱 |
| 逻辑备库 | SQL Apply | 可做逻辑差异 | 兼容性和延迟复杂 |
面试中优先讲物理备库,再补逻辑备库的适用边界。
四、保护模式决定数据安全和性能取舍
Data Guard 有不同保护模式,本质是在数据零丢失、性能和可用性之间取舍。同步传输更安全,但对网络延迟更敏感;异步传输性能更好,但故障时可能丢失少量数据。
最大保护:优先零丢失,主库可用性压力最大
最大可用:尽量零丢失,异常时可降级
最大性能:异步优先,性能好但可能有 RPO
面试回答要说清 RPO 和 RTO:能丢多少数据,多久恢复服务。
五、Switchover 和 Failover 要区分
Switchover 是计划内切换,比如机房维护时把主库和备库角色互换。它要求主备状态健康,目标是无损或低风险切换。
Failover 是主库故障后的应急切换,可能伴随数据丢失,取决于保护模式和日志同步状态。
Switchover: 主库还活着,计划切换
Failover: 主库故障,备库接管
切换后还要考虑应用连接串、监听、服务名、DNS 或负载均衡切换。
六、Data Guard 和 RAC 不解决同一个问题
RAC 是多个实例访问同一个数据库,解决节点级高可用和扩展能力,通常在同城低延迟环境。Data Guard 是主备数据库复制,解决数据库或机房级容灾。
| 方案 | 关注点 | 典型场景 |
|---|---|---|
| RAC | 多实例共享数据库 | 同城高可用、节点故障 |
| Data Guard | 主备复制和容灾 | 异地灾备、主备切换 |
很多大型系统会组合 RAC 和 Data Guard:主站 RAC 提供高可用,异地 Data Guard 做容灾。
七、常见误区与追问
- 误区:Data Guard 和 RAC 是一回事。 RAC 是多实例共享存储,Data Guard 是主备复制容灾。
- 误区:有备库就一定零丢失。 是否零丢失取决于保护模式、同步方式和故障时日志状态。
- 误区:逻辑备库总是比物理备库高级。 逻辑备库灵活但兼容性复杂,物理备库更常用于容灾。
- 追问:Data Guard 复制的核心是什么? 主库 Redo 传输到备库并应用。
- 追问:Switchover 和 Failover 区别? 前者计划内角色切换,后者故障后应急接管。
- 追问:如何衡量容灾能力? 看 RPO 数据丢失窗口和 RTO 恢复时间。
八、面试中可以这样落地
可以设计一个主备容灾方案:主库开启归档和强制日志,配置物理备库,Redo 通过专线传输,备库持续 Redo Apply。日常监控传输延迟和应用延迟,定期演练 Switchover。
主库写入 -> 产生 Redo -> 传输到备库 -> 备库应用 -> 监控 lag
如果业务要求零丢失,就讨论同步传输和网络延迟;如果更看重性能,就讨论最大性能模式和可接受 RPO。
九、加强记忆
Data Guard 记住“主库产 Redo,备库收 Redo,应用 Redo”。物理备库可靠,逻辑备库灵活;Switchover 是计划切,Failover 是故障切;RAC 管同城多实例,Data Guard 管主备容灾。把 RPO/RTO 带上,答案就像真实架构设计。