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

相关推荐
Litluecat2 小时前
信创改造,Oracle切海量数据库,语法与类型坑
数据库·sql·oracle·信创·字段类型·海量
_Kafka_3 小时前
Oracle平均成本计算流程
数据库·oracle
xfhuangfu3 小时前
Oracle 19c中业务表的列发生变化时使用impdp
数据库·oracle
有想法的py工程师4 小时前
手工处理 Oracle Cloud ARM 实例在线 DD Rocky Linux 10报错
linux·arm开发·oracle
jnrjian4 小时前
LOCAL_LISTENER 为空
oracle
jnrjian4 小时前
Oracle 计算表 + LOBs 大小
oracle
Leon-Ning Liu4 小时前
Oracle恢复DELETE数据的PACKAGE(介绍篇)(仅做研究使用)
数据库·oracle
zyl837215 小时前
Matplotlib/Seaborn:数据可视化
数据库·oracle
这个DBA有点耶5 小时前
死锁排查进阶:从日志到根因的完整分析链
java·开发语言·数据库·sql·运维开发·学习方法·dba