当前位置: 首页 > news >正文

Oracle【实战篇】05:DG与ADG的高效部署与性能调优指南

1. DG与ADG部署前的环境准备

在开始部署Oracle Data Guard(DG)或Active Data Guard(ADG)之前,需要做好充分的准备工作。这个阶段就像盖房子前打地基,基础不牢后续工作都会受影响。我见过不少项目因为前期准备不足,导致后期频繁返工。

首先,硬件配置要满足基本要求。主备库服务器建议采用相同配置,特别是CPU和内存要匹配。存储空间方面,备库需要与主库相同的容量,还要额外考虑归档日志的存储需求。网络带宽建议至少1Gbps,如果数据变更频繁,可能需要更高带宽。

软件环境方面,主备库的Oracle版本必须完全一致,包括小版本号和补丁级别。我曾经遇到一个案例,客户主库是19.3.0.0而备库是19.3.0.1,结果DG同步一直报错。操作系统版本可以不同,但要确保Oracle对该OS版本的支持。

关键参数配置需要注意以下几点:

  • 主库必须开启归档模式(ARCHIVELOG)
  • 设置合理的归档日志删除策略
  • 配置正确的DB_UNIQUE_NAME参数
  • 设置合适的LOG_ARCHIVE_CONFIG参数
-- 检查归档模式 SELECT log_mode FROM v$database; -- 启用归档模式(如未开启) SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;

网络配置是另一个重点。主备库之间需要开通以下端口:

  • Oracle监听端口(通常1521)
  • 归档日志传输端口
  • DG Broker使用的端口(如启用)

建议配置/etc/hosts文件确保主机名解析正常,同时配置TNSNAMES.ORA文件测试连接性。我曾经遇到一个奇葩问题,DG同步时断时续,最后发现是DNS解析不稳定导致的。

2. 分步部署DG物理备库

部署物理备库是建立DG环境的核心步骤。下面我分享一个经过实战验证的部署流程,这个流程在金融行业多个项目中稳定运行。

2.1 主库准备工作

首先在主库上执行以下操作:

  1. 启用强制日志记录(Force Logging)
  2. 创建备库控制文件
  3. 备份主库数据文件
  4. 准备初始化参数文件
-- 启用强制日志记录 ALTER DATABASE FORCE LOGGING; -- 创建备库控制文件 ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/standby_control.ctl'; -- 备份主库(使用RMAN) RMAN> BACKUP AS COPY DATABASE FORMAT '/backup/%U';

2.2 备库环境搭建

将主库的备份文件传输到备库服务器后,按照以下步骤操作:

  1. 创建必要的目录结构(如数据文件目录、归档日志目录等)
  2. 还原控制文件
  3. 还原数据文件
  4. 配置备库参数文件

备库的参数文件需要特别注意以下参数:

*.db_unique_name='STANDBY_DB' *.fal_server='PRIMARY_DB' *.standby_file_management='AUTO' *.log_archive_config='DG_CONFIG=(PRIMARY_DB,STANDBY_DB)'

2.3 启动备库并开启同步

完成文件还原和参数配置后,启动备库到mount状态,然后开启Redo Apply进程:

-- 启动备库到mount状态 STARTUP MOUNT; -- 开启Redo Apply ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

此时,备库开始接收并应用主库传输过来的归档日志。可以通过以下命令检查同步状态:

-- 检查备库状态 SELECT database_role, open_mode FROM v$database; -- 检查同步进度 SELECT sequence#, applied FROM v$archived_log ORDER BY sequence# DESC;

3. 从DG升级到ADG的配置方法

ADG是DG的增强版,最大的特点是备库可以在只读状态下继续应用日志。下面介绍如何将标准DG环境升级为ADG。

3.1 检查ADG许可

首先确认已购买ADG选件许可:

SELECT * FROM v$option WHERE parameter = 'Active Data Guard';

3.2 配置备库为ADG模式

在备库上执行以下操作:

-- 停止Redo Apply ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; -- 以只读方式打开备库 ALTER DATABASE OPEN READ ONLY; -- 重新启动Redo Apply(ADG模式) ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

3.3 验证ADG功能

ADG模式下,备库应该同时满足两个条件:

  1. 处于OPEN READ ONLY状态
  2. 正在应用主库传输的redo日志

验证命令:

-- 检查数据库状态 SELECT database_role, open_mode FROM v$database; -- 检查日志应用状态 SELECT process, status FROM v$managed_standby;

4. 性能调优实战技巧

DG/ADG环境的性能调优需要从多个维度入手。以下是经过实战验证的优化方法。

4.1 网络传输优化

日志传输是DG的核心环节,网络延迟会直接影响RPO(恢复点目标)。优化建议:

  1. 使用ASYNC传输模式降低主库压力(适用于非关键业务)
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby_db ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_db';
  1. 启用压缩减少传输量
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby_db LGWR ASYNC COMPRESSION=ENABLE VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_db';

4.2 备库应用性能优化

  1. 增加应用进程数(19c开始支持)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE PARALLEL 4;
  1. 调整内存参数
-- 增加SGA大小 ALTER SYSTEM SET sga_target=8G SCOPE=BOTH; -- 调整PGA大小 ALTER SYSTEM SET pga_aggregate_target=4G SCOPE=BOTH;

4.3 主库性能保护

  1. 合理设置保护模式
-- 最大性能模式(默认) ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE; -- 最大可用性模式 ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;
  1. 监控主库影响
-- 检查LGWR进程负载 SELECT event, wait_class, time_waited FROM v$system_event WHERE wait_class != 'Idle' ORDER BY time_waited DESC;

5. 常见问题排查与解决方案

在实际运维中,DG/ADG环境可能会遇到各种问题。以下是几个典型问题的解决方法。

5.1 同步延迟问题

当发现备库应用延迟时,可以按照以下步骤排查:

  1. 检查网络状况
-- 查看传输状态 SELECT dest_name, status, error FROM v$archive_dest_status;
  1. 检查备库应用进程
-- 查看MRP进程状态 SELECT process, status, sequence# FROM v$managed_standby;
  1. 检查归档日志间隔
-- 主库最新日志 SELECT max(sequence#) FROM v$archived_log WHERE applied='YES'; -- 备库最新应用日志 SELECT max(sequence#) FROM v$archived_log WHERE applied='YES';

5.2 备库无法打开只读

ADG模式下备库无法打开只读的常见原因:

  1. 检查是否有活动事务
SELECT count(*) FROM v$transaction;
  1. 检查是否启用了ADG许可
SELECT * FROM v$option WHERE parameter = 'Active Data Guard';
  1. 检查数据库状态
SELECT database_role, open_mode FROM v$database;

5.3 角色切换失败处理

角色切换是DG运维中的重要操作,失败时可按以下步骤处理:

  1. 检查切换前状态
-- 主库检查 SELECT switchover_status FROM v$database; -- 备库检查 SELECT switchover_status FROM v$database;
  1. 处理常见错误
-- 如果有活动会话 ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' IMMEDIATE; -- 如果日志不同步 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

6. 企业级场景最佳实践

根据不同的业务场景,DG/ADG的配置策略也有所不同。以下是两个典型场景的配置建议。

6.1 金融行业异地容灾

金融行业对数据安全要求极高,建议配置:

  1. 采用最大保护模式
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;
  1. 配置同步传输
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby_db LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_db';
  1. 部署Far Sync实例减少延迟

6.2 电商行业读写分离

电商行业读多写少,适合使用ADG实现读写分离:

  1. 配置多个备库分担读负载
-- 主库配置多个备库 ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='SERVICE=standby_db2 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_db2';
  1. 使用服务名路由读请求
-- 配置服务 BEGIN DBMS_SERVICE.CREATE_SERVICE( service_name => 'read_only_svc', network_name => 'read_only_svc', aq_ha_notifications => TRUE, failover_method => 'BASIC', failover_type => 'SELECT', failover_retries => 180, failover_delay => 5); END; / -- 将服务绑定到备库 ALTER SYSTEM SET SERVICE_NAMES='read_only_svc' SCOPE=MEMORY SID='standby_db';
  1. 应用层配置读请求路由

7. 监控与维护方案

完善的监控体系是保障DG/ADG稳定运行的关键。以下是推荐的监控方案。

7.1 关键指标监控

  1. 同步延迟监控
SELECT name, value, time_computed FROM v$dataguard_stats WHERE name IN ('transport lag', 'apply lag');
  1. 归档日志监控
SELECT dest_name, status, gap_status FROM v$archive_dest_status WHERE dest_id IN (SELECT dest_id FROM v$archive_dest WHERE target='STANDBY');

7.2 自动化维护脚本

  1. 定期检查DG状态
#!/bin/bash # DG状态检查脚本 ORACLE_SID=primary_db sqlplus -s / as sysdba <<EOF set pagesize 100 set linesize 120 SELECT database_role, open_mode FROM v\$database; SELECT dest_name, status, error FROM v\$archive_dest_status WHERE target='STANDBY'; SELECT process, status, sequence# FROM v\$managed_standby; exit; EOF
  1. 自动清理过期归档
-- 配置归档删除策略 CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;

7.3 定期切换演练

建议每季度执行一次角色切换演练,确保灾难恢复能力:

  1. 计划内切换步骤
-- 主库执行 ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY; -- 备库执行 ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; ALTER DATABASE OPEN;
  1. 验证数据一致性
-- 检查数据文件状态 SELECT name, status FROM v$datafile; -- 随机抽样验证数据 SELECT count(*) FROM schema.table SAMPLE(1);

在实际项目中,DG/ADG的配置需要根据具体业务需求进行调整。建议先在测试环境验证方案,再应用到生产环境。遇到问题时,Oracle的alert日志和Data Guard Broker日志(如启用)是首要的排查依据。

http://www.cnnetsun.cn/news/1825293.html

相关文章:

  • 像素史诗·智识终端Visual Studio安装与C++项目配置实战
  • 从收音机调台到手机滤波:串联谐振回路在真实电路里到底怎么用?一个实例讲清楚
  • 深入解析开源游戏增强工具:YimMenu的3个关键优势与实战配置指南
  • SPIRAN ART SUMMONER保姆级教程:从安装到生成第一张幻光艺术图
  • Win10禁用用户账户控制(UAC)的简易指南(图文详解)
  • Step3-VL-10B-Base与Transformer架构优化实践
  • 2026年想找专业北京画框装裱?哪家好这里给你揭秘!
  • Windows文件占用检测终极指南:用PowerToys File Locksmith快速解决文件锁定问题
  • 技术判断力之AI三问亚
  • 避坑指南:Vue3+dhtmlx-gantt常见问题解决方案大全
  • 3分钟快速上手BilibiliDown:跨平台B站视频下载工具完整指南
  • 3步掌握英雄联盟LCU工具集:League-Toolkit完整实战指南
  • Wan2.2-I2V-A14B Java开发实战:构建企业级视频内容生产平台
  • Fillinger:用智能填充技术彻底改变你的Illustrator设计工作流
  • vibe coding是程序员的砒霜还是蜜糖
  • 如何突破Cursor AI编辑器试用限制:全自动化注册与验证码获取方案深度解析
  • 中文斜体字体排版难题与得意黑Smiley Sans字体解决方案
  • 终极指南:5分钟掌握艾尔登法环存档管理,告别存档损坏烦恼!
  • AnimateDiff模型压缩教程:10分钟掌握量化部署技巧
  • Linux原生微信小程序开发:告别Windows依赖的完整解决方案
  • 5分钟搭建Vue3管理后台:开源免费的企业级解决方案终极指南
  • 前端高级面试通关包(P7+/架构向/AI 方向,完整版)
  • SQL死锁问题解析:如何优化高并发场景下的Stuff函数使用
  • 服务器Docker实例化容器 -- 踩坑大全
  • 教你用笔记本部署的大模型,30 分钟搭一个安全又灵活的私有 AI 助手
  • ESP32轻量级Sonos本地控制库:UPnP协议嵌入式实现
  • Android音频系统调试指南:用adb命令快速定位audio_policy配置问题
  • Navicat16/17 Mac版无限重置试用期终极指南:免费使用完整功能
  • PPTAgent终极指南:3分钟从文档到专业演示文稿的AI革命
  • Android集成超轻量级OCR引擎:4.7M模型实现毫秒级离线文字识别