1. DG与ADG部署前的环境准备在开始部署Oracle Data GuardDG或Active Data GuardADG之前需要做好充分的准备工作。这个阶段就像盖房子前打地基基础不牢后续工作都会受影响。我见过不少项目因为前期准备不足导致后期频繁返工。首先硬件配置要满足基本要求。主备库服务器建议采用相同配置特别是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 主库准备工作首先在主库上执行以下操作启用强制日志记录Force Logging创建备库控制文件备份主库数据文件准备初始化参数文件-- 启用强制日志记录 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 备库环境搭建将主库的备份文件传输到备库服务器后按照以下步骤操作创建必要的目录结构如数据文件目录、归档日志目录等还原控制文件还原数据文件配置备库参数文件备库的参数文件需要特别注意以下参数*.db_unique_nameSTANDBY_DB *.fal_serverPRIMARY_DB *.standby_file_managementAUTO *.log_archive_configDG_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 ApplyADG模式 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;3.3 验证ADG功能ADG模式下备库应该同时满足两个条件处于OPEN READ ONLY状态正在应用主库传输的redo日志验证命令-- 检查数据库状态 SELECT database_role, open_mode FROM v$database; -- 检查日志应用状态 SELECT process, status FROM v$managed_standby;4. 性能调优实战技巧DG/ADG环境的性能调优需要从多个维度入手。以下是经过实战验证的优化方法。4.1 网络传输优化日志传输是DG的核心环节网络延迟会直接影响RPO恢复点目标。优化建议使用ASYNC传输模式降低主库压力适用于非关键业务ALTER SYSTEM SET LOG_ARCHIVE_DEST_2SERVICEstandby_db ASYNC VALID_FOR(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAMEstandby_db;启用压缩减少传输量ALTER SYSTEM SET LOG_ARCHIVE_DEST_2SERVICEstandby_db LGWR ASYNC COMPRESSIONENABLE VALID_FOR(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAMEstandby_db;4.2 备库应用性能优化增加应用进程数19c开始支持ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE PARALLEL 4;调整内存参数-- 增加SGA大小 ALTER SYSTEM SET sga_target8G SCOPEBOTH; -- 调整PGA大小 ALTER SYSTEM SET pga_aggregate_target4G SCOPEBOTH;4.3 主库性能保护合理设置保护模式-- 最大性能模式默认 ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE; -- 最大可用性模式 ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;监控主库影响-- 检查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 同步延迟问题当发现备库应用延迟时可以按照以下步骤排查检查网络状况-- 查看传输状态 SELECT dest_name, status, error FROM v$archive_dest_status;检查备库应用进程-- 查看MRP进程状态 SELECT process, status, sequence# FROM v$managed_standby;检查归档日志间隔-- 主库最新日志 SELECT max(sequence#) FROM v$archived_log WHERE appliedYES; -- 备库最新应用日志 SELECT max(sequence#) FROM v$archived_log WHERE appliedYES;5.2 备库无法打开只读ADG模式下备库无法打开只读的常见原因检查是否有活动事务SELECT count(*) FROM v$transaction;检查是否启用了ADG许可SELECT * FROM v$option WHERE parameter Active Data Guard;检查数据库状态SELECT database_role, open_mode FROM v$database;5.3 角色切换失败处理角色切换是DG运维中的重要操作失败时可按以下步骤处理检查切换前状态-- 主库检查 SELECT switchover_status FROM v$database; -- 备库检查 SELECT switchover_status FROM v$database;处理常见错误-- 如果有活动会话 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 金融行业异地容灾金融行业对数据安全要求极高建议配置采用最大保护模式ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;配置同步传输ALTER SYSTEM SET LOG_ARCHIVE_DEST_2SERVICEstandby_db LGWR SYNC AFFIRM VALID_FOR(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAMEstandby_db;部署Far Sync实例减少延迟6.2 电商行业读写分离电商行业读多写少适合使用ADG实现读写分离配置多个备库分担读负载-- 主库配置多个备库 ALTER SYSTEM SET LOG_ARCHIVE_DEST_3SERVICEstandby_db2 LGWR ASYNC VALID_FOR(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAMEstandby_db2;使用服务名路由读请求-- 配置服务 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_NAMESread_only_svc SCOPEMEMORY SIDstandby_db;应用层配置读请求路由7. 监控与维护方案完善的监控体系是保障DG/ADG稳定运行的关键。以下是推荐的监控方案。7.1 关键指标监控同步延迟监控SELECT name, value, time_computed FROM v$dataguard_stats WHERE name IN (transport lag, apply lag);归档日志监控SELECT dest_name, status, gap_status FROM v$archive_dest_status WHERE dest_id IN (SELECT dest_id FROM v$archive_dest WHERE targetSTANDBY);7.2 自动化维护脚本定期检查DG状态#!/bin/bash # DG状态检查脚本 ORACLE_SIDprimary_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 targetSTANDBY; SELECT process, status, sequence# FROM v\$managed_standby; exit; EOF自动清理过期归档-- 配置归档删除策略 CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;7.3 定期切换演练建议每季度执行一次角色切换演练确保灾难恢复能力计划内切换步骤-- 主库执行 ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY; -- 备库执行 ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; ALTER DATABASE OPEN;验证数据一致性-- 检查数据文件状态 SELECT name, status FROM v$datafile; -- 随机抽样验证数据 SELECT count(*) FROM schema.table SAMPLE(1);在实际项目中DG/ADG的配置需要根据具体业务需求进行调整。建议先在测试环境验证方案再应用到生产环境。遇到问题时Oracle的alert日志和Data Guard Broker日志如启用是首要的排查依据。