外观
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 日志
- 配置密码文件
- 配置网络连接
备用数据库:
- 与主数据库版本相同
- 相同的字符集
- 足够的存储空间
- 配置密码文件
- 配置网络连接
配置步骤
准备主数据库:
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;创建备用数据库:
- 使用 RMAN 复制
- 使用 DBCA 创建
- 使用备份恢复创建
配置网络:
- 配置 tnsnames.ora
- 配置 listener.ora
配置 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;验证配置:
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 故障转移功能的步骤:
- 准备测试:确保备用数据库与主数据库同步
- 执行切换测试:sql
DGMGRL> SWITCHOVER TO 'standby'; - 验证新主数据库:确保新主数据库正常运行
- 执行回切测试:sql
DGMGRL> SWITCHOVER TO 'primary'; - 记录测试结果:文档化测试过程和结果
- 定期测试:建议每季度执行一次完整的故障转移测试
