Skip to content

Oracle 异地灾备架构

异地灾备是企业数据保护策略的重要组成部分,它确保在本地数据中心发生灾难性故障时,业务能够快速恢复。Oracle提供了多种异地灾备解决方案,包括Data Guard、GoldenGate等。本文将详细介绍Oracle异地灾备架构的设计原则、实现方法、故障处理流程以及最佳实践,帮助DBA构建可靠的异地灾备系统。

灾备架构设计基础

灾备核心指标

RTO(Recovery Time Objective)

  • 从故障发生到业务恢复的最大允许时间
  • 衡量业务连续性的关键指标
  • 不同级别的系统需要不同的RTO:
    • 关键业务系统:RTO < 1小时
    • 重要业务系统:RTO 1-4小时
    • 一般业务系统:RTO > 4小时

RPO(Recovery Point Objective)

  • 灾难发生后,允许丢失的数据量
  • 衡量数据完整性的关键指标
  • 不同级别的系统需要不同的RPO:
    • 关键业务系统:RPO < 5分钟
    • 重要业务系统:RPO 5-30分钟
    • 一般业务系统:RPO > 30分钟

灾备架构分类

灾备类型距离网络延迟RPO适用场景
同城灾备< 50公里< 5ms接近0关键业务系统,RPO要求高
异地灾备100-500公里10-50ms数秒到数分钟重要业务系统,需要地理冗余
跨区域灾备> 500公里> 50ms数分钟到数十分钟核心业务系统,最高级别的灾难恢复

数据同步方式

同步方式描述RPO对网络要求适用场景
同步复制主库等待备库确认收到日志后再提交接近0高带宽、低延迟同城灾备,关键业务系统
异步复制主库不等待备库确认,直接提交取决于网络延迟和同步频率较低,适合广域网异地灾备,重要业务系统
半同步复制主库等待至少一个备库确认收到日志后再提交接近0中等平衡RPO和性能的场景
延迟复制备库故意延迟应用日志,用于防止逻辑错误可配置防止误操作,支持细粒度恢复

基于Data Guard的异地灾备架构

Data Guard架构概述

Data Guard是Oracle官方提供的高可用性和灾备解决方案,通过Redo日志复制实现主备库的数据同步。

核心组件

  • 主库(Primary Database):生产数据中心的主要数据库,处理所有写操作
  • 备库(Standby Database):灾备中心的数据库,接收并应用主库的Redo日志
  • Far Sync Standby:可选组件,位于主库附近,接收主库的同步日志后异步转发到异地备库
  • Redo传输服务:负责将主库的Redo日志传输到备库
  • Apply服务:负责在备库应用Redo日志

Data Guard架构模式

1. 物理备库(Physical Standby)

  • 基于块级复制,与主库完全一致
  • 支持Active Data Guard,备库可用于只读查询
  • RTO较短,恢复速度快
  • 适合大多数灾备场景

配置示例

sql
-- 主库配置
ALTER SYSTEM SET log_archive_config = 'DG_CONFIG=(PROD,DR)';
ALTER SYSTEM SET log_archive_dest_2 = 'SERVICE=DR ASYNC NOAFFIRM delay=0 OPTIONAL COMPRESSION=ENABLE DB_UNIQUE_NAME=DR VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DR';

-- 备库配置
ALTER SYSTEM SET log_archive_config = 'DG_CONFIG=(PROD,DR)';
ALTER SYSTEM SET standby_file_management = 'AUTO';
ALTER SYSTEM SET fal_server = 'PROD';

2. 逻辑备库(Logical Standby)

  • 基于逻辑日志复制,支持不同的表结构和版本
  • 备库可用于DML操作
  • RTO较长,恢复速度慢
  • 适合需要备库进行业务处理的场景

3. 快照备库(Snapshot Standby)

  • 可写的备库,基于物理备库创建
  • 支持临时的写操作,可快速回滚到物理备库状态
  • 适合测试和开发场景

Data Guard 19c与21c新特性对比

特性Oracle 19cOracle 21c业务价值
Active Data Guard DML重定向支持增强支持,性能提升50%允许在Active Data Guard上执行DML操作,自动重定向到主库
Far Sync Standby支持增强,支持自动故障切换降低主库网络延迟影响,提高灾备可靠性
实时查询优化基础支持增强的并行查询支持,自动调整并行度提高Active Data Guard的查询性能
备库自动索引维护支持增强,增加索引监控和自适应索引自动维护备库索引,减少DBA工作量
增量备份优化支持增强,减少网络传输量降低备库增量备份的网络开销
多租户Data Guard增强支持增强,支持PDB级别的故障切换提高多租户环境下的灾备灵活性

Data Guard灾备切换流程

1. 计划内切换(Switchover)

适用场景:主库维护、升级、迁移等 操作步骤

sql
-- 1. 验证主库和备库状态
SELECT SWITCHOVER_STATUS FROM V$DATABASE;

-- 2. 主库切换为备库
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;

-- 3. 关闭并重启主库(现在是备库)
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;

-- 4. 备库切换为主库
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

-- 5. 打开新主库
ALTER DATABASE OPEN;

-- 6. 启动新备库的Redo应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

2. 计划外切换(Failover)

适用场景:主库发生灾难性故障 操作步骤

sql
-- 1. 确认主库已不可用
-- 2. 备库执行故障切换准备
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;

-- 3. 备库切换为主库
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

-- 4. 打开新主库
ALTER DATABASE OPEN;

-- 5. 如果需要,重建原主库作为备库

Data Guard最佳实践

  1. 网络配置

    • 配置独立的网络用于Redo传输
    • 启用Redo压缩,减少网络带宽消耗
    • 使用Far Sync Standby降低主库网络延迟
  2. 存储配置

    • 备库使用与主库相当的存储性能
    • 考虑使用ASM实现存储层的冗余
    • 定期检查备库存储的健康状态
  3. 监控与告警

    • 监控Redo传输延迟和应用延迟
    • 监控备库的应用进程状态
    • 配置告警机制,及时通知DBA
  4. 维护策略

    • 定期验证备库的可恢复性
    • 定期测试Active Data Guard的只读性能
    • 保持主备库的Oracle版本和补丁一致

基于GoldenGate的异地灾备架构

GoldenGate架构概述

GoldenGate是Oracle提供的实时数据集成和复制解决方案,基于逻辑变更记录(Logical Change Records, LCRs)实现数据同步。

核心组件

  • Extract进程:在源端捕获数据变更
  • Data Pump进程:可选组件,将Extract捕获的数据转发到目标端
  • Collector进程:在目标端接收源端传输的数据
  • Replicat进程:在目标端应用数据变更
  • Manager进程:管理所有GoldenGate进程
  • Trail文件:存储捕获的数据变更

GoldenGate架构模式

1. 单向复制(One-Way Replication)

  • 源端到目标端的单向数据复制
  • 最简单的GoldenGate架构
  • 适合大多数灾备场景

2. 双向复制(Bidirectional Replication)

  • 源端和目标端之间的双向数据复制
  • 支持主备库之间的双向同步
  • 适合双活数据中心场景

3. 级联复制(Cascading Replication)

  • 源端→中间节点→目标端的级联复制
  • 适合跨多个地理区域的灾备场景
  • 减少源端的网络负载

GoldenGate 19c与21c新特性对比

特性Oracle 19cOracle 21c业务价值
自动冲突检测与解决支持基础功能增强,支持更多冲突类型提高双向复制的可靠性,减少人工干预
实时监控增强支持增强,提供更详细的监控指标提高GoldenGate的可管理性
云集成增强支持增强,支持更多云平台简化云迁移和混合云灾备
多租户支持支持增强,支持PDB级别的复制提高多租户环境下的灵活性
安全性增强支持增强,提供更细粒度的安全控制提高数据复制的安全性

GoldenGate配置示例

源端配置

bash
-- 启用补充日志
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE FORCE LOGGING;

-- 创建GoldenGate管理用户
CREATE USER ggadmin IDENTIFIED BY ggadmin DEFAULT TABLESPACE users QUOTA UNLIMITED ON users;
GRANT DBA TO ggadmin;

-- 配置Extract进程
EDIT PARAMS EXT1
EXTRACT EXT1
USERID ggadmin, PASSWORD ggadmin
EXTTRAIL ./dirdat/et
TABLE SCOTT.*;

-- 配置Data Pump进程
EDIT PARAMS DP1
EXTRACT DP1
USERID ggadmin, PASSWORD ggadmin
RMTHOST dr_host, MGRPORT 7809
RMTTRAIL ./dirdat/rt
TABLE SCOTT.*;

目标端配置

bash
-- 创建Replicat进程
EDIT PARAMS REP1
REPLICAT REP1
USERID ggadmin, PASSWORD ggadmin
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/rep1.dsc, PURGE
MAP SCOTT.*, TARGET SCOTT.*;

GoldenGate最佳实践

  1. 网络配置

    • 配置独立的网络用于GoldenGate数据传输
    • 启用压缩,减少网络带宽消耗
    • 使用Data Pump进程,减少源端的网络负载
  2. 性能优化

    • 调整Extract和Replicat进程的并行度
    • 优化Trail文件的大小和数量
    • 考虑使用批处理模式,提高大批量数据复制的性能
  3. 监控与告警

    • 监控Extract和Replicat进程的状态
    • 监控Trail文件的大小和增长速度
    • 配置告警机制,及时通知DBA
  4. 冲突处理

    • 为双向复制配置冲突检测和解决策略
    • 定期检查Discard文件,处理复制错误
    • 考虑使用时间戳或序列来避免冲突

混合灾备架构设计

对于关键业务系统,推荐采用Data Guard+GoldenGate的混合灾备架构:

1. 核心架构设计

  • Data Guard用于核心数据库:提供高可用性和灾备能力,确保核心数据的安全性
  • GoldenGate用于应用级复制:实现跨平台、跨版本的应用数据同步
  • 共享存储或对象存储:用于存储备份数据和归档日志
  • 统一监控平台:监控Data Guard和GoldenGate的状态

2. 混合架构优势

  • 高可靠性:结合Data Guard和GoldenGate的优势,提供多层次的数据保护
  • 灵活性:支持跨平台、跨版本的灾备
  • 低RTO/RPO:Data Guard提供较短的RTO,GoldenGate提供灵活的RPO配置
  • 可扩展性:可以轻松扩展到多个灾备中心

3. 混合架构实践案例

场景:某大型企业的核心业务系统,包含Oracle数据库和其他非Oracle数据库

架构设计

  • 核心Oracle数据库使用Data Guard实现同城和异地灾备
  • 非Oracle数据库使用GoldenGate实现数据同步
  • 应用层使用GoldenGate实现跨平台数据同步
  • 定期进行灾备切换演练,验证RTO/RPO指标

效果

  • RTO < 30分钟,RPO < 5分钟
  • 支持计划内和计划外切换
  • 提供了多层次的数据保护

灾备切换管理

切换类型与流程

切换类型触发原因数据丢失风险操作流程适用场景
计划内切换(Switchover)主库维护、升级、迁移主备角色互换,可控主库维护、数据中心迁移
计划外切换(Failover)主库灾难性故障可能丢失部分数据将备库提升为主库主库故障、灾难事件
测试切换灾备演练模拟故障场景,验证灾备系统灾备演练、有效性验证

切换前准备工作

  1. 文档准备

    • 详细的切换操作文档
    • RTO/RPO指标定义
    • 回滚计划
  2. 环境检查

    • 主备库状态检查
    • 网络连接检查
    • 存储状态检查
    • 监控系统检查
  3. 人员准备

    • 切换执行团队
    • 技术支持团队
    • 业务验证团队

切换后验证工作

  1. 技术验证

    • 数据库状态检查
    • 数据一致性验证
    • 应用连接验证
    • 性能指标验证
  2. 业务验证

    • 核心业务功能验证
    • 业务流程完整性验证
    • 数据准确性验证
    • 响应时间验证
  3. 文档更新

    • 更新切换文档
    • 记录切换过程中的问题和解决方案
    • 更新灾备系统状态文档

灾备监控与维护

监控指标

Data Guard监控指标

  • 主备库状态
  • Redo传输延迟
  • Redo应用延迟
  • 日志序列差距
  • 备库可用空间
  • Active Data Guard查询性能

GoldenGate监控指标

  • Extract和Replicat进程状态
  • Trail文件大小和增长速度
  • 数据处理速率
  • 复制错误和Discard文件
  • 冲突解决统计

监控工具

工具名称功能适用场景
Oracle Enterprise Manager提供全面的Data Guard和GoldenGate监控企业级监控,适合大型环境
Data Guard Broker简化Data Guard的管理和监控Data Guard专用监控
GoldenGate Director简化GoldenGate的管理和监控GoldenGate专用监控
Prometheus + Grafana开源监控解决方案,可自定义监控指标灵活的监控需求,适合各种规模
Zabbix开源监控工具,支持Oracle和GoldenGate监控中小型环境,预算有限

定期维护任务

  1. 每日维护

    • 检查主备库状态
    • 监控Redo传输和应用延迟
    • 检查GoldenGate进程状态
  2. 每周维护

    • 验证备库的可恢复性
    • 检查存储可用空间
    • 清理旧的Trail文件和日志文件
  3. 每月维护

    • 执行灾备切换演练
    • 更新统计信息
    • 检查数据库和GoldenGate的补丁状态
  4. 季度维护

    • 完整的灾难恢复测试
    • 性能评估和优化
    • 更新灾备文档

常见问题与故障处理

Data Guard常见问题

问题1:Redo传输延迟过高

原因

  • 网络带宽不足
  • 网络延迟过高
  • 主库或备库负载过高

解决方案

  • 增加网络带宽
  • 调整Redo传输模式(从同步改为异步)
  • 使用Far Sync Standby
  • 优化主库或备库的性能

问题2:备库应用延迟过高

原因

  • 备库资源不足
  • 复杂的SQL语句导致应用缓慢
  • 备库上的只读查询导致资源竞争

解决方案

  • 增加备库的资源(CPU、内存)
  • 优化备库上的SQL语句
  • 考虑使用多个备库,分离只读查询和Redo应用
  • 调整备库的并行应用设置

GoldenGate常见问题

问题1:Extract进程异常终止

原因

  • 源端数据库连接中断
  • 源端数据库结构变更
  • Extract进程遇到无法处理的变更

解决方案

  • 检查源端数据库状态和连接
  • 重新初始化Extract进程
  • 检查并修复数据结构变更

问题2:Replicat进程出现复制错误

原因

  • 目标端数据与源端不一致
  • 目标端数据库结构变更
  • 数据冲突

解决方案

  • 检查并修复目标端数据一致性
  • 重新初始化Replicat进程
  • 配置合适的冲突检测和解决策略

灾备最佳实践汇总

  1. 定义明确的RTO/RPO指标:根据业务重要性,为不同系统定义不同的RTO/RPO指标
  2. 选择合适的灾备方案:根据业务需求、技术条件和成本因素选择合适的灾备方案
  3. 设计冗余架构:配置冗余的网络、存储和计算资源,避免单点故障
  4. 定期进行灾备演练:至少每半年进行一次灾备切换演练,验证RTO/RPO指标
  5. 建立完善的监控机制:实时监控灾备系统的状态,及时发现和解决问题
  6. 编写详细的操作文档:包括灾备切换流程、故障处理流程和维护手册
  7. 保持版本一致性:尽量保持主库和备库的Oracle版本和补丁一致
  8. 考虑云集成:利用云平台的优势,简化灾备架构,降低成本
  9. 培训和知识共享:确保团队成员掌握灾备系统的管理和操作技能
  10. 持续优化:定期评估灾备系统的性能和可靠性,持续优化架构和流程

常见问题(FAQ)

Q1: 如何选择Data Guard和GoldenGate?

A1: 根据业务需求和技术条件选择:

  • 如果是同版本、同平台的Oracle数据库,优先选择Data Guard,它提供更好的性能和可靠性
  • 如果需要跨平台、跨版本的灾备,或者需要细粒度的数据复制,选择GoldenGate
  • 对于关键业务系统,推荐使用Data Guard+GoldenGate的混合架构

Q2: 异地灾备的网络带宽如何估算?

A2: 网络带宽估算公式:

所需带宽 = 每日日志生成量 / 每日复制时间 / 0.7
  • 每日日志生成量:主库每天生成的Redo日志量
  • 每日复制时间:考虑到网络波动,通常按20小时计算
  • 0.7:网络利用率系数

示例:如果主库每天生成100GB的Redo日志,所需带宽约为:

100GB / 20小时 / 0.7 ≈ 7.14GB/小时 ≈ 16.5Mbps

Q3: 如何验证灾备系统的有效性?

A3: 验证灾备系统有效性的方法:

  1. 定期进行灾备切换演练,验证RTO/RPO指标
  2. 定期检查备库的数据一致性
  3. 监控备库的应用延迟
  4. 测试备库的恢复能力
  5. 模拟各种故障场景,验证灾备系统的响应

Q4: 如何降低灾备成本?

A4: 降低灾备成本的方法:

  1. 利用云平台的弹性伸缩特性,降低硬件成本
  2. 合理设计灾备架构,避免过度配置
  3. 采用增量备份和压缩技术,减少存储成本
  4. 共享灾备资源,多个系统共享同一个灾备中心
  5. 考虑使用延迟复制,降低网络带宽成本

Q5: Oracle 21c在灾备方面有哪些值得关注的新特性?

A5: Oracle 21c在灾备方面的主要新特性:

  1. Active Data Guard DML重定向增强,性能提升50%
  2. Far Sync Standby支持自动故障切换
  3. 实时查询优化,增强的并行查询支持
  4. 备库自动索引维护,增加索引监控和自适应索引
  5. 多租户Data Guard增强,支持PDB级别的故障切换
  6. GoldenGate自动冲突检测与解决增强
  7. 云集成增强,支持更多云平台

Q6: 如何处理灾备切换过程中的数据不一致问题?

A6: 处理数据不一致问题的方法:

  1. 定期进行数据一致性验证,及时发现和解决问题
  2. 切换前进行详细的数据一致性检查
  3. 配置合适的Redo传输和应用模式,减少数据不一致的风险
  4. 对于逻辑备库,考虑使用Data Guard Broker进行管理,减少人为错误
  5. 建立数据不一致的应急处理流程

总结

Oracle异地灾备架构设计是一个复杂的系统工程,需要综合考虑业务需求、技术条件和成本因素。选择合适的灾备方案,设计合理的架构,建立完善的监控和维护机制,定期进行灾备切换演练,是确保灾备系统有效性的关键。

随着Oracle 19c和21c的发布,Oracle在灾备方面提供了更多的增强特性,如Active Data Guard DML重定向、Far Sync Standby自动故障切换、备库自动索引维护等,这些特性进一步提高了灾备系统的可靠性和可管理性。

在实际部署中,企业应根据自身的业务需求和技术条件,选择合适的灾备方案,如Data Guard、GoldenGate或混合架构,并遵循最佳实践,确保灾备系统能够在灾难发生时发挥预期的作用,保障业务的连续性和数据的安全性。