Oracle Data Guard 管理

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 秒级告警、核心交换机双机热备。

相关推荐
ClouGence2 天前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
ClouGence8 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
曹牧9 天前
Oracle EXPLAIN PLAN
数据库·oracle
贤时间9 天前
codex 助力oracle ebs 开发
数据库·oracle
秉承初心9 天前
PostgreSQL 数据性能瓶颈突破实战
数据库·postgresql·oracle
Curvatureflight9 天前
MySQL 深分页越来越慢?从 LIMIT OFFSET 改成游标分页
数据库·oracle
XZ-0700019 天前
MySQL事务
数据库·mysql·oracle
tiancaijiben9 天前
阿里云函数计算FC如何实现网站的定时任务与自动化
数据库·oracle·dba
xfhuangfu9 天前
Oracle 19c 多租户体系架构介绍
数据库·oracle·架构
杨云龙UP9 天前
Spotlight 接入 Oracle 数据库监控操作指南 2026-06-16
数据库·oracle·性能监控·预警·阈值·spotlight·瓶颈分析