Skip to content

Oracle Data Guard 架构

Data Guard 组件

主数据库(Primary Database)

  • 概述:生产数据库,处理所有用户事务
  • 核心功能:生成 redo 日志,将 redo 日志传输到备用数据库
  • 配置要求:必须运行在归档模式
  • 角色:生产环境的主要数据库

备用数据库(Standby Database)

  • 概述:主数据库的副本,用于灾难恢复和高可用性
  • 核心功能:接收、归档和应用来自主数据库的 redo 日志
  • 类型:物理备用数据库、逻辑备用数据库、快照备用数据库
  • 角色:在主数据库故障时接管服务

Redo 传输服务(Redo Transport Services)

  • 概述:负责将 redo 日志从主数据库传输到备用数据库
  • 传输方式:同步传输(SYNC)、异步传输(ASYNC)、延迟传输(DELAY)
  • 传输目标:备用 redo 日志文件(Standby Redo Logs)
  • 网络要求:需要可靠的网络连接

应用服务(Apply Services)

  • 概述:负责在备用数据库上应用接收到的 redo 日志
  • 应用方式
    • 物理备用:介质恢复(Media Recovery)
    • 逻辑备用:SQL 应用(SQL Apply)
  • 应用模式:实时应用(Real-Time Apply)、归档应用(Archived Apply)
  • 数据一致性:确保备用数据库与主数据库保持一致

角色转换服务(Role Transition Services)

  • 概述:管理主数据库和备用数据库之间的角色转换
  • 转换类型
    • 切换(Switchover):计划内角色转换
    • 故障转移(Failover):计划外角色转换
  • 转换过程:协调角色转换,确保数据一致性
  • 验证:转换后验证数据库状态

监控和管理接口

  • Enterprise Manager:图形化管理界面
  • DGMGRL:Data Guard 命令行界面
  • SQL*Plus:SQL 命令行工具
  • Data Guard Broker:集中管理工具

Data Guard 类型

物理备用数据库

  • 概述:主数据库的精确字节级副本
  • 实现方式:使用介质恢复应用 redo 日志
  • 优势
    • 与主数据库完全兼容
    • 高性能应用 redo
    • 支持实时应用
    • 可用于滚动升级
  • 适用场景:灾难恢复、高可用性、数据保护

逻辑备用数据库

  • 概述:使用 SQL 语句重建的备用数据库
  • 实现方式:将 redo 日志转换为 SQL 语句并执行
  • 优势
    • 可在备用数据库上执行读写操作
    • 支持异构平台
    • 可用于数据库升级和应用迁移
  • 适用场景:报表查询、数据仓库、升级测试

快照备用数据库

  • 概述:可读写的物理备用数据库
  • 实现方式:基于物理备用数据库创建快照
  • 优势
    • 可用于测试和开发
    • 可快速转换回物理备用
  • 适用场景:测试、开发、培训

Data Guard 保护模式

最大保护模式(Maximum Protection)

  • 概述:提供最高级别的数据保护
  • 工作原理
    • 使用同步传输
    • 主数据库事务在提交前,必须确保 redo 日志已写入至少一个备用数据库的备用 redo 日志文件
  • 优势:零数据丢失
  • 劣势:主数据库性能可能受影响,网络故障可能导致主数据库挂起
  • 适用场景:对数据丢失零容忍的环境

最高可用性模式(Maximum Availability)

  • 概述:在保证高可用性的同时提供数据保护
  • 工作原理
    • 正常情况下使用同步传输
    • 当网络故障时,自动切换到异步传输
  • 优势:平衡数据保护和可用性
  • 劣势:网络故障期间可能有数据丢失
  • 适用场景:需要高可用性且对数据丢失敏感的环境

最大性能模式(Maximum Performance)

  • 概述:提供最高级别的性能
  • 工作原理
    • 使用异步传输
    • 主数据库事务提交不需要等待 redo 日志传输到备用数据库
  • 优势:主数据库性能不受影响
  • 劣势:可能有数据丢失
  • 适用场景:对性能要求高,可接受少量数据丢失的环境

Data Guard 架构设计

单 standby 架构

  • 概述:一个主数据库和一个备用数据库
  • 优势:简单易管理,成本低
  • 劣势:备用数据库故障时无冗余
  • 适用场景:小型环境,预算有限

多 standby 架构

  • 概述:一个主数据库和多个备用数据库
  • 优势
    • 更高的冗余度
    • 可在不同地理位置部署
    • 可同时用于不同目的(如灾难恢复和报表)
  • 劣势:管理复杂度增加,成本提高
  • 适用场景:大型企业,关键业务系统

级联 standby 架构

  • 概述:主数据库 -> 级联备用数据库 -> 远程备用数据库
  • 优势
    • 减少主数据库网络负载
    • 适合远距离部署
  • 劣势:级联备用数据库故障可能影响远程备用数据库
  • 适用场景:需要跨多个地理位置部署的环境

双向 Data Guard 架构

  • 概述:两个数据库互为主备
  • 优势
    • 快速切换
    • 负载均衡
  • 劣势:管理复杂度高
  • 适用场景:需要快速故障转移和负载均衡的环境

Data Guard 配置

前提条件

  • 主数据库

    • 运行在归档模式
    • 启用强制日志记录
    • 配置备用 redo 日志
    • 配置密码文件
    • 配置网络连接
  • 备用数据库

    • 与主数据库版本相同
    • 相同的字符集
    • 足够的存储空间
    • 配置密码文件
    • 配置网络连接

配置步骤

  1. 准备主数据库

    sql
    -- 启用归档模式
    SHUTDOWN IMMEDIATE;
    STARTUP MOUNT;
    ALTER DATABASE ARCHIVELOG;
    ALTER DATABASE OPEN;
    
    -- 启用强制日志记录
    ALTER DATABASE FORCE LOGGING;
    
    -- 添加备用 redo 日志
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u01/app/oracle/oradata/PRIMARY/srl4.log') SIZE 50M;
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/u01/app/oracle/oradata/PRIMARY/srl5.log') SIZE 50M;
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/u01/app/oracle/oradata/PRIMARY/srl6.log') SIZE 50M;
  2. 创建备用数据库

    • 使用 RMAN 复制
    • 使用 DBCA 创建
    • 使用备份恢复创建
  3. 配置网络

    • 配置 tnsnames.ora
    • 配置 listener.ora
  4. 配置 Data Guard Broker

    sql
    -- 启用 Data Guard Broker
    ALTER SYSTEM SET DG_BROKER_START=TRUE SCOPE=BOTH;
    
    -- 使用 DGMGRL 创建配置
    DGMGRL> CONNECT sys/password@primary
    DGMGRL> CREATE CONFIGURATION 'dg_config' AS PRIMARY DATABASE IS 'primary' CONNECT IDENTIFIER IS primary;
    DGMGRL> ADD DATABASE 'standby' AS CONNECT IDENTIFIER IS standby MAINTAINED AS PHYSICAL;
    DGMGRL> ENABLE CONFIGURATION;
  5. 验证配置

    sql
    -- 查看 Data Guard 状态
    SELECT * FROM V$DATAGUARD_STATUS;
    
    -- 查看备用数据库状态
    SELECT database_role, protection_mode, open_mode FROM V$DATABASE;
    
    -- 使用 DGMGRL 查看状态
    DGMGRL> SHOW CONFIGURATION;
    DGMGRL> SHOW DATABASE 'primary';
    DGMGRL> SHOW DATABASE 'standby';

Data Guard 管理

日常监控

  • 监控 redo 传输

    sql
    -- 查看 redo 传输状态
    SELECT * FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID > 1;
    
    -- 查看备用 redo 日志状态
    SELECT * FROM V$STANDBY_LOG;
  • 监控 redo 应用

    sql
    -- 查看应用状态
    SELECT process, status, thread#, sequence#, block# FROM V$MANAGED_STANDBY;
    
    -- 查看应用延迟
    SELECT name, value FROM V$DATAGUARD_STATS WHERE NAME = 'apply lag';
  • 使用 Enterprise Manager 监控

    • 导航到 "Data Guard" 选项卡
    • 查看整体状态
    • 监控性能和延迟

角色转换

切换(Switchover)

  • 概述:计划内角色转换,无数据丢失
  • 步骤
    sql
    -- 使用 DGMGRL 执行切换
    DGMGRL> CONNECT sys/password@primary
    DGMGRL> SWITCHOVER TO 'standby';
    
    -- 验证新主数据库
    SELECT database_role, open_mode FROM V$DATABASE;

故障转移(Failover)

  • 概述:计划外角色转换,可能有数据丢失
  • 步骤
    sql
    -- 使用 DGMGRL 执行故障转移
    DGMGRL> CONNECT sys/password@standby
    DGMGRL> FAILOVER TO 'standby';
    
    -- 验证新主数据库
    SELECT database_role, open_mode FROM V$DATABASE;

维护操作

  • 补丁应用

    • 使用滚动补丁应用
    • 先应用备用数据库,再执行切换
  • 数据库升级

    • 使用 Data Guard 进行数据库升级
    • 先升级备用数据库,再执行切换
  • 备份

    • 可以在备用数据库上执行备份,减轻主数据库负载

Data Guard 最佳实践

架构设计

  • 选择合适的保护模式:根据业务需求选择
  • 部署多个备用数据库:提高冗余度
  • 地理分散部署:避免单点故障
  • 使用级联架构:减少主数据库网络负载

配置优化

  • 使用备用 redo 日志:提高 redo 应用性能
  • 启用实时应用:减少故障转移时间
  • 配置适当的网络带宽:确保 redo 传输流畅
  • 使用 Data Guard Broker:简化管理

监控与维护

  • 建立监控系统:监控 redo 传输和应用状态
  • 设置告警:对延迟和错误设置告警
  • 定期测试:定期执行切换测试
  • 文档化配置:记录配置和操作步骤

性能优化

  • 优化网络:使用高速网络,考虑压缩
  • 优化存储:备用数据库使用高性能存储
  • 调整参数
    sql
    -- 优化 redo 传输
    ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=10 SCOPE=BOTH;
    
    -- 优化应用性能
    ALTER SYSTEM SET PARALLEL_RECOVERY_WORKERS=4 SCOPE=BOTH;

常见问题与解决方案

Redo 传输失败

症状

  • 备用数据库无法接收 redo 日志
  • V$ARCHIVE_DEST_STATUS 显示错误

解决方案

  • 检查网络连接
  • 检查 tnsnames.ora 配置
  • 检查密码文件是否一致
  • 检查归档目录权限和空间

Redo 应用延迟

症状

  • 备用数据库与主数据库存在较大延迟
  • V$DATAGUARD_STATS 显示较大的应用延迟

解决方案

  • 启用实时应用
  • 增加应用进程数
  • 优化备用数据库存储性能
  • 检查网络带宽

切换失败

症状

  • 执行切换操作时失败
  • 出现错误消息

解决方案

  • 检查 Data Guard 配置状态
  • 确保所有备用数据库都正常
  • 检查网络连接
  • 查看详细错误日志

故障转移后的数据一致性

症状

  • 故障转移后数据不一致
  • 应用程序出现错误

解决方案

  • 确保使用正确的故障转移方法
  • 在故障转移前尝试应用所有可用的 redo
  • 故障转移后验证数据一致性
  • 考虑使用闪回数据库恢复到一致状态

常见问题(FAQ)

Q1: Data Guard 与 RAC 的区别是什么?

A1: Data Guard 和 RAC 都是 Oracle 高可用性解决方案,但它们的设计目标和工作方式不同:

  • Data Guard:通过维护备用数据库提供灾难恢复和高可用性,主要用于站点级故障保护
  • RAC:通过集群技术提供实例级高可用性,主要用于单站点内的故障保护
  • 组合使用:通常在大型环境中,Data Guard 和 RAC 会结合使用,提供多层次的高可用性保护

Q2: 如何选择 Data Guard 保护模式?

A2: 选择 Data Guard 保护模式应根据业务需求:

  • 最大保护模式:适用于对数据丢失零容忍的环境,如金融交易系统
  • 最高可用性模式:适用于需要高可用性且对数据丢失敏感的环境,如企业核心系统
  • 最大性能模式:适用于对性能要求高,可接受少量数据丢失的环境,如非关键业务系统

Q3: 物理备用数据库和逻辑备用数据库有什么区别?

A3: 物理备用数据库和逻辑备用数据库的主要区别:

  • 物理备用:主数据库的精确字节级副本,使用介质恢复应用 redo,与主数据库完全兼容
  • 逻辑备用:使用 SQL 语句重建的备用数据库,可在备用数据库上执行读写操作,支持异构平台
  • 选择依据:如果需要完全兼容性和最高性能,选择物理备用;如果需要在备用数据库上执行查询或报表,选择逻辑备用

Q4: 如何提高 Data Guard 的性能?

A4: 提高 Data Guard 性能的方法:

  • 网络优化:使用高速网络,考虑使用 redo 压缩
  • 存储优化:备用数据库使用高性能存储
  • 参数调整:增加 LOG_ARCHIVE_MAX_PROCESSES,设置适当的 PARALLEL_RECOVERY_WORKERS
  • 配置优化:使用备用 redo 日志,启用实时应用
  • 架构优化:考虑使用级联架构减少主数据库负载

Q5: 如何测试 Data Guard 的故障转移功能?

A5: 测试 Data Guard 故障转移功能的步骤:

  1. 准备测试:确保备用数据库与主数据库同步
  2. 执行切换测试
    sql
    DGMGRL> SWITCHOVER TO 'standby';
  3. 验证新主数据库:确保新主数据库正常运行
  4. 执行回切测试
    sql
    DGMGRL> SWITCHOVER TO 'primary';
  5. 记录测试结果:文档化测试过程和结果
  6. 定期测试:建议每季度执行一次完整的故障转移测试