news 2026/7/13 11:09:58

Oracle Data Guard深度实战:从搭建到运维的完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Oracle Data Guard深度实战:从搭建到运维的完整指南

一、开篇:为什么 Data Guard 是生产环境的标配?


某银行核心交易系统在 A 城市数据中心运行。为保障业务连续性,在 B 城市部署了 Data Guard 物理备库。某天 A 城市因自然灾害导致数据中心断电,主库无法访问。DBA 在 B 城市执行了 Failover 操作,备库在 3 分钟内切换为主库,业务恢复运行,数据丢失为零。


Data Guard 是 Oracle 原生提供的高可用和灾备解决方案,通过将主库的归档日志实时传输到备库并自动应用,实现主备数据库的实时同步。


本篇文章从架构原理、环境搭建、运维管理到故障切换,全面覆盖 Data Guard 的核心知识点和实战操作。


二、Data Guard 架构全景图


备库数据中心-B城市日志传输主库数据中心-A城市LNSn-SYNC同步ARCn-ASYNC异步客户端访问Switchover/Failover

应用服务器

主库VIP

备库VIP

主库 Primary Database

LGWR进程

ARCn归档进程

联机重做日志

本地归档日志

备库Standby Redo Log

备库归档日志

MRP恢复进程

物理备库-只读

Data Guard Broker


架构关键解读:


  • 主库:生产数据库,接收所有用户事务。
  • Standby Redo Log:备库上的联机重做日志,接收主库实时传输的 REDO。
  • 物理备库:主库的块级别物理副本,通过 REDO APPLY 保持同步。
  • 日志传输方式:SYNC 同步传输保证零数据丢失,ASYNC 异步传输提供最大性能。


三、Data Guard 核心概念


1. Data Guard 的三种保护模式


| 保护模式 | 传输方式 | 数据丢失风险 | 性能影响 | 适用场景 |

|----------|----------|-------------|----------|----------|

|最大保护| SYNC | ✅ 零丢失 | ❌ 最大 | 金融核心系统 |

|最高可用| SYNC(正常时) | ⚠️ 几乎零丢失 | ⚠️ 中等 | 企业级应用 |

|最高性能| ASYNC | ⚠️ 可能有少量丢失 | ✅ 最小 | 报表查询分离 |


2. 物理备库与逻辑备库的区别


| 对比维度 | 物理备库 | 逻辑备库 |

|----------|----------|----------|

| 同步方式 | 块级别 REDO APPLY | 行级别 SQL APPLY |

| 物理结构 | 与主库完全相同 | 可以与主库不同 |

| 打开模式 | MOUNT 或 READ ONLY | READ WRITE |

| 额外索引 | 不能创建 | 可以创建 |

| 同步速度 | ✅ 快 | ⚠️ 慢 |


四、Data Guard 搭建实战


1. 主库配置


步骤一:启用强制日志和归档模式

-- 启用强制日志 ALTER DATABASE FORCE LOGGING; -- 确认归档模式 ARCHIVE LOG LIST; -- 如果未开启归档模式: SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; -- 创建 Standby Redo Log(大小与主库联机日志相同) ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u01/oradata/ORCL/std_redo04a.log') SIZE 500M; ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/u01/oradata/ORCL/std_redo05a.log') SIZE 500M; ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/u01/oradata/ORCL/std_redo06a.log') SIZE 500M; ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/u01/oradata/ORCL/std_redo07a.log') SIZE 500M;


步骤二:配置主库参数

-- 配置归档目标(传输到备库) ALTER SYSTEM SET log_archive_dest_2 = 'SERVICE=standby_db ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_db'; -- 配置本地归档目标 ALTER SYSTEM SET log_archive_dest_1 = 'LOCATION=/u01/archivelog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl'; -- 启用归档目标 ALTER SYSTEM SET log_archive_dest_state_1 = ENABLE; ALTER SYSTEM SET log_archive_dest_state_2 = ENABLE; -- 设置 Data Guard 相关参数 ALTER SYSTEM SET fal_server = 'standby_db'; ALTER SYSTEM SET fal_client = 'orcl'; ALTER SYSTEM SET standby_file_management = AUTO; ALTER SYSTEM SET db_unique_name = 'orcl' SCOPE=SPFILE;


2. 创建备库


步骤一:创建备库参数文件

-- 从主库创建 pfile CREATE PFILE='/tmp/init_standby.ora' FROM SPFILE; -- 修改备库 pfile 中的参数 -- *.db_unique_name='standby_db' -- *.fal_server='orcl' -- *.log_archive_dest_2='SERVICE=orcl ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'


步骤二:使用 RMAN DUPLICATE 创建备库

# 在备库服务器上启动实例到 NOMOUNT 状态 sqlplus / as sysdba STARTUP NOMOUNT PFILE='/tmp/init_standby.ora'; # 在主库使用 RMAN DUPLICATE 创建备库 rman target sys/password@orcl auxiliary sys/password@standby_db RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER SPFILE SET db_unique_name='standby_db' COMMENT 'Data Guard standby' SET fal_server='orcl' COMMENT 'FAL server' NOFILENAMECHECK;


步骤三:启动备库日志应用

-- 在备库上启动日志应用 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; -- 查看备库同步状态 SELECT process, status, sequence# FROM v$managed_standby;


3. 验证 Data Guard 同步


查看传输延迟:

SELECT name, value, unit, time_computed FROM v$dataguard_stats WHERE name IN ('transport lag', 'apply lag', 'apply finish time');


在主库切换日志验证传输:

ALTER SYSTEM SWITCH LOGFILE; -- 在备库查看日志应用情况 SELECT sequence#, applied FROM v$archived_log ORDER BY sequence# DESC;


五、Data Guard 运维管理


1. 实时查询备库(Active Data Guard)


-- 以只读方式打开备库 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; ALTER DATABASE OPEN READ ONLY; -- 重新启动日志应用(同时保持只读) ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;


2. 监控同步状态


查看归档日志传输状态:

SELECT dest_id, status, error, log_sequence, applied_scn FROM v$archive_dest_status WHERE dest_id = 2;


查看日志应用进度:

SELECT al.thrd "Thread", almax "Last Seq Received", lhmax "Last Seq Applied" FROM (SELECT thread# thrd, MAX(sequence#) almax FROM v$archived_log WHERE resetlogs_change# = (SELECT MAX(resetlogs_change#) FROM v$archived_log) GROUP BY thread#) al, (SELECT thread# thrd, MAX(sequence#) lhmax FROM v$log_history WHERE resetlogs_change# = (SELECT MAX(resetlogs_change#) FROM v$log_history) GROUP BY thread#) lh WHERE al.thrd = lh.thrd;


3. 处理日志 GAP(缺失)


检测 GAP:

SELECT * FROM v$archive_gap;


自动恢复 GAP:

-- Data Guard 会自动检测并恢复 GAP -- 如果自动恢复失败,可以手动恢复 -- 在主库找到缺失的归档日志 -- 传输到备库并注册 ALTER DATABASE REGISTER LOGFILE '/path/to/missing_archive.arc';


六、角色切换实战


1. Switchover(计划切换)


精确描述:

Switchover 是计划内的主备角色互换,通常用于主库维护(如升级、迁移),切换过程不丢失数据。


操作步骤:


-- 步骤一:在主库上确认可以切换 ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN; -- 步骤二:在原备库上切换为主库 ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; -- 步骤三:在新主库上打开 ALTER DATABASE OPEN; -- 步骤四:在新备库(原主库)上启动日志应用 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;


2. Failover(故障切换)


精确描述:

Failover 是主库故障时的紧急切换,备库接管为主库,可能丢失主库故障时未传输的日志数据。


操作步骤:


-- 步骤一:在备库上执行 Failover ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH; -- 或者强制 Failover(跳过未应用的日志) ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH SKIP STANDBY LOGFILE; -- 步骤二:将备库切换为主库 ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; -- 步骤三:打开数据库 ALTER DATABASE OPEN;


注意:Failover 后原主库需要重建才能重新加入 Data Guard 环境。


七、使用 Data Guard Broker 简化管理


1. 配置 Data Guard Broker


-- 在主库和备库上启用 Broker ALTER SYSTEM SET dg_broker_start = TRUE; -- 创建 Broker 配置 DGMGRL> CONNECT sys/password@orcl DGMGRL> CREATE CONFIGURATION 'dg_config' AS PRIMARY DATABASE IS 'orcl' CONNECT IDENTIFIER IS orcl; DGMGRL> ADD DATABASE 'standby_db' AS CONNECT IDENTIFIER IS standby_db MAINTAINED AS PHYSICAL; DGMGRL> ENABLE CONFIGURATION;


2. 使用 Broker 进行切换


-- 查看配置状态 DGMGRL> SHOW CONFIGURATION; -- 执行 Switchover DGMGRL> SWITCHOVER TO standby_db; -- 执行 Failover DGMGRL> FAILOVER TO standby_db;


八、总结:记住这个"异地备份"类比就够了


【Data Guard 是实时异地备份】


  • 物理备库:✅ 一台复印机,主库每写一页,复印机就复印一页。
  • 最大保护模式:❌ 每写一页都必须等复印机确认,复印机坏了就停笔。
  • 最高可用模式:⚠️ 平时等复印机确认,复印机坏了就暂时不等。
  • 最高性能模式:✅ 只管写,复印机后面自己慢慢复印。
  • Switchover:有计划地把复印机变成主打印机。
  • Failover:❌ 打印机坏了,紧急启用复印机作为主打印机。


Data Guard 是 Oracle 高可用架构的基石。掌握 Data Guard 的搭建、运维和切换操作,是 DBA 迈向高级架构师的必经之路。建议生产环境至少配置最高可用模式,核心系统配置最大保护模式。


你的生产环境部署了 Data Guard 吗?使用的哪种保护模式?是否进行过真实的 Failover 演练?欢迎评论区分享你的经验。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 11:09:51

Unity多Pass渲染与GPU Instancing兼容性优化实战指南

1. 项目概述:当多Pass渲染遇上GPU Instancing在Unity开发中,尤其是涉及复杂视觉效果的项目,性能优化是一个永恒的话题。我见过太多项目,美术效果炫酷,但一到真机或WebGL平台,帧率就惨不忍睹。其中&#xff…

作者头像 李华
网站建设 2026/7/13 11:09:38

坚守尽责务实医者初心,百芝堂传承中医智慧助力慢病健康管理

当前,糖尿病已然成为备受重视的全球性公共卫生难题,慢病长期调理困扰着众多家庭。面对血糖管控的各类难题,越来越多人开始寻求科学、温和可持续的健康干预方式。百芝堂中医药集团深耕中医药慢病健康领域,传承古法医学思想&#xf…

作者头像 李华
网站建设 2026/7/13 11:08:25

系统迁移前,务必确认目标硬盘的容量与接口

1. 系统迁移前的硬件自查清单 上周帮朋友迁移系统到新买的SSD时,遇到个哭笑不得的情况——500GB的源系统盘死活装不进480GB的目标盘。后来发现他C盘实际占用380GB,但隐藏的恢复分区占了120GB。这个教训让我意识到: 硬盘容量匹配不是简单的数…

作者头像 李华
网站建设 2026/7/13 11:06:03

模板驱动型文档自动化:让Word变成业务系统前端

1. 项目概述:当文档生产变成“填空题”,而不是“写作文”你有没有经历过这种场景:每周一早上,市场部同事准时把一份《Q3行业分析简报》的Word模板发到群里,要求销售、运营、客户成功三个部门各自填充数据、替换图表、调…

作者头像 李华
网站建设 2026/7/13 11:05:26

SVN 与 Git 混合开发实战:IDEA 2024.2 双版本控制 3 场景配置

SVN 与 Git 混合开发实战:IDEA 2024.2 双版本控制 3 场景配置在企业级开发环境中,版本控制系统的迁移往往不是一蹴而就的过程。许多团队面临着遗留项目使用 SVN 而新模块采用 Git 的混合开发场景。本文将深入探讨如何在 IntelliJ IDEA 2024.2 中高效配置…

作者头像 李华
网站建设 2026/7/13 11:04:57

RHEL 7.2 Minimal 镜像安装:VMware 16 配置 2 核 4G 虚拟机避坑指南

RHEL 7.2 Minimal 镜像在 VMware 16 上的高效部署与优化实践对于需要在本地开发或测试环境中快速搭建轻量级 RHEL 服务器的中级运维或开发人员来说,使用 Minimal 安装镜像可以显著减少系统资源占用并提高安全性。本文将详细介绍如何在 VMware Workstation 16 上高效…

作者头像 李华