1、Data Guard 基本概念
Data Guard 管理是对 Oracle 主备数据库集群从部署、日常运维、故障处理到升级退役的全生命周期管理,核心目标是保障主备库数据一致性、实现秒级故障转移、满足业务 99.99% 以上的高可用要求。它不是简单的 "搭完就不管",而是一套包含监控、切换、排障、优化的标准化运维体系。
2、Data Guard 管理体系
- 配置管理:初始部署、参数调整、保护模式切换
- 状态监控:传输状态、应用状态、延迟、告警
- 角色管理:计划内切换(Switchover)、故障切换(Failover)
- 故障处理:传输中断、应用中断、GAP修复
- 性能优化:Redo传输优化、日志应用优化、网络优化
- 备份恢复:备库备份、主备库故障恢复
- 升级迁移:滚动升级、跨平台迁移、版本升级
Data Guard 管理的核心是"永远让备库处于可切换状态"。任何时候主库故障,备库都能在分钟级接管业务,数据零丢失。
3、核心管理模块
3.1、配置管理
3.1.1、基础配置检查
sql
-- 主备库通用检查
SELECT name, database_role, open_mode, protection_mode, protection_level FROM v$database;
-- 主库:检查Redo传输配置
SELECT dest_id, status, destination, gap_status FROM v$archive_dest_status WHERE dest_id=2;
-- 备库:检查日志应用状态
SELECT process, status, thread#, sequence#, block# FROM v$managed_standby WHERE process LIKE 'MRP%';
-- 检查Standby Redo Log(必须配置,否则无法实时应用)
SELECT group#, thread#, bytes/1024/1024 AS size_mb, status FROM v$standby_log;
3.1.2、保护模式切换
Data Guard 支持三种保护模式,可在线切换:
sql
-- 切换到最大可用模式(生产推荐,正常运行时零数据丢失)
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;
-- 切换到最大性能模式(异步传输,主库性能最优)
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;
-- 切换到最大保护模式(绝对零数据丢失,主库故障时会挂起)
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;
3.1.3、DG Broker 配置
DG Broker 是 Oracle 官方提供的 Data Guard 集中管理工具,简化配置、监控和切换操作:
sql
-- 主备库均执行:启用Broker
ALTER SYSTEM SET dg_broker_start=TRUE SCOPE=BOTH;
-- 连接DGMGRL
dgmgrl sys/SysPassword@primary
-- 创建配置
CREATE CONFIGURATION dg_config AS PRIMARY DATABASE IS primary CONNECT IDENTIFIER IS primary;
-- 添加备库
ADD DATABASE standby AS CONNECT IDENTIFIER IS standby;
-- 启用配置
ENABLE CONFIGURATION;
-- 查看配置状态
SHOW CONFIGURATION;
SHOW DATABASE primary;
SHOW DATABASE standby;
3.2、状态监控
3.2.1、关键监控指标
| 指标 | 正常阈值 | 告警阈值 | 说明 |
|---|---|---|---|
| Redo 传输延迟 | <1 秒 | >5 秒 | 主库生成的 Redo 到备库接收的时间差 |
| 应用延迟 | <5 秒 | >30 秒 | 备库接收 Redo 到应用完成的时间差 |
| 归档 GAP | 0 | >0 | 主备库之间缺失的归档日志数量 |
| MRP 进程状态 | APPLYING_LOG | 其他 | 备库日志应用进程状态 |
| LNS 进程状态 | WRITING | 其他 | 主库 Redo 传输进程状态 |
3.2.2、常用监控 SQL
sql
-- 查看主备延迟(最常用)
SELECT name,value,unit,time_computed FROM v$dataguard_stats WHERE name IN ('transport lag', 'apply lag');
-- 查看归档GAP
SELECT thread#,low_sequence#,high_sequence# FROM v$archive_gap;
-- 查看备库应用进度
SELECT thread#,sequence#,applied,first_time,next_time FROM v$archived_log ORDER BY thread#, sequence# DESC;
-- 查看Data Guard相关等待事件
SELECT event,total_waits,time_waited/100 AS time_waited_sec FROM v$system_event WHERE event LIKE '%Data Guard%' ORDER BY time_waited_sec DESC;
3.3、角色切换管理
Data Guard 支持两种角色切换:Switchover(计划内切换) 和 Failover(故障切换)。
3.3.1、Switchover(计划内切换,零数据丢失)
用于主库计划内维护(如硬件升级、补丁安装),主备库角色互换,无数据丢失。
DGMGRL 一键切换:
bash
dgmgrl sys/SysPassword@primary
SWITCHOVER TO standby;
手动切换步骤:
sql
-- 步骤1:主库切换为备库
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
-- 步骤2:备库切换为主库
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
ALTER DATABASE OPEN;
-- 步骤3:新备库启动日志应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
3.3.2、Failover(故障切换,紧急情况)
用于主库意外故障无法恢复时,将备库提升为主库,可能丢失少量数据(取决于保护模式)。
DGMGRL 一键故障切换:
bash
dgmgrl sys/SysPassword@standby
FAILOVER TO standby;
手动故障切换步骤:
sql
-- 步骤1:备库停止日志应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
-- 步骤2:完成故障切换
ALTER DATABASE FAILOVER TO PRIMARY;
-- 步骤3:打开新主库
ALTER DATABASE OPEN;
-- 步骤4:重建旧主库为新备库(使用RMAN或闪回)
实例:Data Guard 备库 GAP 修复
**S --- Situation(场景):**某制造公司核心系统因机房核心交换机故障,主备网络中断 6 小时。主库 216 个归档日志(共 850GB)已被 RMAN 自动备份并删除,网络恢复后自动 GAP 修复失效,备库完全失去灾备能力,主库单点运行,任何故障将导致全厂生产线停摆。
**T --- Task(任务):**2 小时内修复 GAP,恢复主备实时同步,不影响生产线运行,数据零丢失,备库恢复可切换状态。
A --- Action(行动):
1、备库准备:
获取备库最小检查点SCN:1876543210
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
确认GAP期间无新增数据文件:
SELECT MIN(CHECKPOINT_CHANGE#) FROM V$DATAFILE_HEADER;
2、RMAN 主库增量备份
3、传输备份:rsync -avzP /backup/gap/* oracle@standby:/backup/gap/
4、RMAN 备库恢复
5、恢复同步:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
**R --- Result(结果):**总耗时 1 小时 38 分钟,提前完成;生产线零停机,ERP 系统 TPS 波动 < 3%,业务无感知;数据零丢失,主备库生产数据完全一致;备库恢复实时同步,可随时接管业务;落地改进:归档保留 7 天、GAP 秒级告警、核心交换机双机热备。