数据库教程FGMT20‑Oracle容灾体系架构与数据库升级迁移方案

前言

企业级Oracle数据库系统,一方面需要依靠容灾架构抵御机房硬件故障、灾难事故,保障业务数据安全与业务连续性;另一方面随着业务迭代,会面临数据库版本升级、硬件更换、机房迁移、架构改造等工作。Oracle Data Guard是Oracle官方原生核心容灾解决方案,依靠Redo日志传输与应用实现主备数据同步;同时Oracle提供多套升级迁移技术路线,适配原地升级、跨平台迁移、跨版本改造等不同业务场景。风哥教程本文围绕Data Guard整体架构、日志传输进程、三种数据保护模式、ADG、Far Sync、角色切换,以及数据库备份、升级、迁移全套技术路线、实操命令、风险点完整展开讲解。风哥 itpux‑com

本套风哥教程面向DBA、数据库架构师、运维工程师,全部实验标准化环境配置:主机名称fgedu‑net‑cn ,硬件规格64G物理内存、8颗CPU;主库数据库实例名fgedudb,数据库名fgedudb,备库实例名fgedudb_stby,测试业务用户名fgedu,文件根目录统一为/fgedudb,整套实验基于Oracle19c企业版完成。风哥教程本文分为前言大纲介绍、核心理论知识、实战操作演练、总结四大模块;实战章节包含大量操作系统Shell、SQL、DGMGRL脚本,读者可以在测试环境复现容灾搭建、角色切换、升级迁移全流程,掌握容灾建设、版本升级、数据迁移整套生产落地手段。网上搜索风哥教程可以学习全套数据库教程

内容大纲

  1. Oracle容灾建设业务背景,RPO、RTO核心指标定义
  2. Oracle DataGuard整体架构,主库、备库类型:物理备库、逻辑备库、快照备库
  3. Redo日志传输机制,LGWR、ARCH、LNS、RFS进程工作原理
  4. DataGuard三种数据保护模式:最大保护、最大可用、最大性能
  5. ADG活动数据卫士、Far Sync远端同步实例原理与适用场景
  6. Switchover计划切换、Failover故障切换,Fast‑Start Failover自动故障切换
  7. Data Broker(DGMGRL)DG管理组件架构与价值
  8. Oracle数据库备份策略,RMAN备份核心要点
  9. Oracle数据库升级方案:原地升级DBUA、AutoUpgrade工具
  10. Oracle数据库迁移方案:RMAN复制、数据泵、可传输表空间、PDB插拔迁移
  11. DataGuard完整搭建实操,DGMGRL配置管理,角色切换完整演练
  12. 升级迁移项目前置检查、回退预案、生产风险与故障排查

一、核心理论知识

本章节为本套风哥教程理论基础,理清容灾架构原理、保护模式差异,区分各类升级迁移方案的优缺点,才能根据业务RPO/RTO指标,合理设计容灾与迁移改造方案,规避生产数据丢失风险。风哥教程 113257174

1.1 容灾核心指标RPO与RTO

  • RPO恢复点目标:灾难发生之后,业务最多允许丢失的数据量;代表数据丢失容忍度。
  • RTO恢复时间目标 :灾难发生之后,业务恢复对外服务所消耗的时间;代表业务中断容忍时长。
    不同保护模式直接决定RPO,切换预案、切换流程决定RTO。网上搜索风哥教程可以学习全套数据库教程

1.2 DataGuard整体架构与备库类型

DataGuard由一台主库(Primary)与一台或者多台备库(Standby)共同组成,主库产生Redo日志,通过网络传输到备库,备库应用Redo日志保持数据同步。备库分为四类:

  1. Physical Standby物理备库:块级别Redo应用,物理数据块和主库完全一致;支持ADG只读打开同时做Redo应用,生产使用最广泛。
  2. Logical Standby逻辑备库:把Redo日志解析转换为SQL语句在备库执行;备库表结构、索引可以和主库不同,适合报表、数据改造场景,约束较多。
  3. Snapshot Standby快照备库:物理备库临时切换为读写状态,可以跑测试业务;测试完成可以回滚快照,重新恢复为备库继续同步主库数据。
  4. Far Sync远端同步实例:本身不存放业务数据,只转发Redo日志,解决远距离机房同步时延问题。

进程说明:

  • LGWR:主库日志写进程,写本地redo日志;
  • ARCH:主库归档进程,完成本地归档;
  • LNSn:主库日志网络传输进程,把redo流发送备库;
  • RFS:备库远程文件服务进程,接收网络传输过来的redo;
  • MRP0:物理备库Redo应用进程。

1.3 三种DataGuard数据保护模式

  1. 最大保护(Maximum Protection):零数据丢失。主库每一笔事务提交,必须至少一个备库确认收到同步Redo,事务才可以提交。如果备库全部不可用,主库会直接挂起,保护数据零丢失,对网络质量要求极高。
  2. 最大可用(Maximum Availability):优先保证零数据丢失;同步模式传输,备库故障的时候自动降级为异步,主库不会挂起。金融生产环境最常用模式。
  3. 最大性能(Maximum Performance):异步ASYNC传输Redo。主库提交不需要等待备库应答,主库性能优先;灾难发生存在丢失少量Redo日志的风险。风哥数据库教程 itpux‑com

1.4 ADG活动数据卫士与Far Sync

  1. ADG Active Data Guard:物理备库可以同时处于只读打开状态,并且持续执行Redo Apply日志应用。备库可以承担报表、查询、备份业务,实现读写分离,充分利用灾备硬件资源。
  2. Far Sync实例:无数据文件,只做redo转发。跨远距离两地三中心架构,主库同步Far Sync,Far Sync异步转发给远端真正备库,既保障本地零丢失,又规避长距离网络带来主库性能冲击。

1.5 三种角色切换模式

  1. Switchover计划切换 :计划性维护,主备角色互相交换,零数据丢失。原主库切换完成后自动转变为备库,继续参与容灾同步,用于机房维护、硬件升级演练。
  2. Failover故障切换 :主库发生重大灾难完全不可用,将备库提升为主库;存在数据丢失风险,取决于保护模式。旧主库已经损坏,需要重建之后才能重新加入容灾环境。
  3. Fast‑Start Failover(FSFO自动故障切换):依靠Observer观察进程,自动检测主库故障,自动执行failover,不需要人工介入,缩短RTO。Observer进程建议部署在第三台独立主机,避免单点故障。

1.6 Data Guard Broker(DGMGRL)管理组件

DGMGRL是Data Guard官方命令行管理工具,可以统一管理整个DG配置,统一修改保护模式、执行切换、状态监控,代替大量手工alter数据库命令;生产环境强烈推荐部署Broker,减少手工操作失误。网上搜索风哥教程可以学习全套数据库教程

1.7 Oracle数据库备份策略

RMAN是Oracle官方备份工具,支持全库备份、增量备份、归档日志备份。容灾不能完全替代备份:DG抵御机房故障,但是无法抵御逻辑错误(误drop表、误delete数据),逻辑损坏会同步传播到备库。RMAN备份+DataGuard容灾需要同时建设

1.8 主流升级迁移方案对比

  1. 原地升级DBUA/AutoUpgrade:原主机原地升级Oracle软件版本;数据文件保留,适合同主机版本升级;升级停机窗口,升级失败回退难度高。
  2. RMAN复制迁移:RMAN duplicate复制数据库到新主机;支持跨小端大端之外的平台迁移,迁移后数据库版本和源库一致。
  3. 数据泵expdp/impdp迁移:逻辑迁移,导出导入对象;跨操作系统、跨版本、跨字符集都支持;大数据量场景迁移耗时较长。
  4. 可传输表空间TTS/FULL TTS:元数据导出,数据文件直接拷贝;适合海量大库,迁移速度快。
  5. PDB插拔迁移:多租户环境,unplug‑plug迁移PDB,适合CDB环境业务库迁移升级。

升级迁移核心原则:迁移前做完整备份;业务低峰执行;完整回退预案;迁移完成业务验证。上51CTO搜索风哥可以学习全套数据库教程

二、实战操作演练

本套风哥教程全部实战操作,操作主机fgedu‑net‑cn,主库fgedudb,备库fgedudb_stby,业务用户fgedu,目录/fgedudb,硬件规格64G内存8CPU。

环境说明:操作系统oracle用户;主备库ORACLE_HOME均指向/fgedudb;主备库tnsnames网络互通;DG操作大量需要sysdba权限。

2.1 操作系统与数据库环境校验

2.1.1操作系统层面检查(主机fgedu‑net‑cn)
复制代码
#确认主机名称
hostname
#确认ORACLE_HOME路径全部指向/fgedudb
echo $ORACLE_HOME
#查看内存64G,CPU8核
free -h
lscpu
#确认数据文件、归档、dump目录
ls -ld /fgedudb/oradata /fgedudb/arch /fgedudb/diag

校验输出:hostname输出fgedu‑net‑cn,总内存64G,逻辑CPU为8颗。

2.1.2 主库数据库关键初始化参数确认(64G内存8CPU规格)

登录主库sqlplus / as sysdba

复制代码
show parameter memory_target;
show parameter sga_target;
show parameter pga_aggregate_target;
show parameter db_unique_name;
show parameter log_archive_config;
show parameter log_archive_dest_2;
show parameter standby_file_management;

主库spfile基础配置,适配64G内存:

复制代码
alter system set memory_max_target=48G scope=spfile;
alter system set memory_target=48G scope=spfile;
alter system set db_unique_name='fgedudb_pri' scope=spfile;
alter system set standby_file_management='AUTO' scope=spfile;
alter system set log_archive_config='dg_config=(fgedudb_pri,fgedudb_stby)' scope=spfile;
alter system set log_archive_dest_2='service=fgedudb_stby LGWR SYNC AFFIRM valid_for=(online_logfiles,primary_role) db_unique_name=fgedudb_stby' scope=spfile;
alter system set log_archive_dest_state_2=enable scope=spfile;

standby_file_management=AUTO,备库数据文件自动管理,主库增删数据文件备库自动同步。

2.1.3 创建测试业务用户
复制代码
create user fgedu identified by fgedudb default tablespace users temporary tablespace temp;
grant connect,resource to fgedu;
grant select_catalog_role to fgedu;

2.2 主库准备,RMAN duplicate创建物理备库实操

2.2.1 主库开启强制日志,添加standby redo log
复制代码
alter database force logging;
--增加standby redo log,大小和在线redo保持一致
alter database add standby logfile group 4 ('/fgedudb/oradata/fgedudb/stdredo04.log') size 2048M;
alter database add standby logfile group 5 ('/fgedudb/oradata/fgedudb/stdredo05.log') size 2048M;
alter database add standby logfile group 6 ('/fgedudb/oradata/fgedudb/stdredo06.log') size 2048M;
alter database add standby logfile group 7 ('/fgedudb/oradata/fgedudb/stdredo07.log') size 2048M;
2.2.2 tnsnames.ora配置,主备互相解析

编辑/fgedudb/network/admin/tnsnames.ora,配置主备库网络服务名,主备两边文件保持一致。

复制代码
FGEDUDB_PRI =
  (DESCRIPTION =
    (ADDRESS=(PROTOCOL=TCP)(HOST=fgedu‑net‑cn)(PORT=1521))
    (CONNECT_DATA=(SERVICE_NAME=fgedudb_pri))
  )
FGEDUDB_STBY =
  (DESCRIPTION =
    (ADDRESS=(PROTOCOL=TCP)(HOST=fgedu‑net‑cn)(PORT=1521))
    (CONNECT_DATA=(SERVICE_NAME=fgedudb_stby))
  )
2.2.3 RMAN duplicate搭建物理备库

备库端启动实例到nomount状态,密码文件拷贝至备库。

复制代码
#备库oracle用户
export ORACLE_SID=fgedudb_stby
sqlplus / as sysdba <<EOF
startup nomount;
EOF

主库执行rman duplicate,通过网络复制创建备库:

复制代码
rman target sys/fgedudb@fgedudb_pri auxiliary sys/fgedudb@fgedudb_stby

run {
allocate channel prmy1 type disk;
allocate auxiliary channel stby1 type disk;
duplicate target database for standby from active database
spfile
parameter_value_convert 'fgedudb_pri':'fgedudb_stby'
set db_unique_name='fgedudb_stby'
set standby_file_management='AUTO'
set log_archive_dest_2='service=fgedudb_pri LGWR SYNC AFFIRM valid_for=(online_logfiles,primary_role) db_unique_name=fgedudb_pri'
nofilenamecheck;
}

duplicate执行完成,备库启动到mount状态。

2.2.4 备库启动redo应用,开启ADG只读模式

备库sqlplus / as sysdba

复制代码
alter database open read only;
alter database recover managed standby database using current logfile disconnect from session;

此时ADG生效,备库只读打开同时持续应用redo日志。风哥数据库教程 itpux‑com

2.3 Data Guard Broker DGMGRL配置实操

2.3.1 主备库设置dg_broker_start参数为true

主库、备库两边都执行:

复制代码
alter system set dg_broker_start=true scope=both;
2.3.2 登录dgmgrl创建DG配置
复制代码
dgmgrl sys/fgedudb@fgedudb_pri

create configuration 'fg_dg_conf' as primary database is fgedudb_pri connect identifier is fgedudb_pri;
add database fgedudb_stby as connect identifier is fgedudb_stby maintained as physical;
enable configuration;
show configuration;

show configuration输出status为SUCCESS代表Broker配置正常。网上搜索风哥教程可以学习全套数据库教程

2.3.3 修改保护模式为最大可用
复制代码
edit configuration set protection mode as maxavailability;
show configuration;

2.4 Switchover计划切换实操(零数据丢失)

计划维护演练,主备互换角色,业务无数据丢失。

复制代码
validate database fgedudb_pri;
validate database fgedudb_stby;
switchover to fgedudb_stby;
show configuration;

切换完成,原备库fgedudb_stby变为新主库;原主库fgedudb_pri自动转为备库,启动redo应用。切换完成验证业务读写,验证redo同步正常。

2.5 Failover故障切换实操(灾难主库彻底损坏)

仅主库真实故障不可访问才执行failover,存在丢失数据风险。

复制代码
failover to fgedudb_stby;
show configuration;

执行完成,备库提升为主库;旧主库损坏,需要重建之后才能重新加入DG配置。

2.6 Fast‑Start Failover自动故障切换配置实操

Observer进程建议部署第三台主机,本实验在本机演示。

复制代码
edit database fgedudb_pri set property LogXptMode='SYNC';
edit database fgedudb_stby set property LogXptMode='SYNC';
enable fast_start failover;
show fast_start failover;

操作系统启动observer后台进程:

复制代码
nohup dgmgrl sys/fgedudb@fgedudb_pri "start observer file=/fgedudb/diag/fsfo.dat" > /fgedudb/diag/observer.log 2>&1 &

2.7 快照备库Snapshot Standby实操

物理备库临时切换读写快照备库,用于测试业务。

复制代码
convert database fgedudb_stby to snapshot standby;
show configuration;

测试业务完成,转回物理备库,丢弃快照变更,继续同步主库redo:

复制代码
convert database fgedudb_stby to physical standby;
show configuration;

上51CTO搜索风哥可以学习全套数据库教程

2.8 DG状态常用检查SQL脚本

复制代码
--查看数据库角色、切换状态
select db_unique_name,database_role,switchover_status from v$database;

--查看redo传输、应用延迟
select dest_id,status,error,transport_lag,apply_lag from v$archive_dest_status where dest_id<>0;

--备库查看redo应用进程状态
select process,status,sequence# from v$managed_standby;

2.9 RMAN备份实操,容灾之外逻辑防护

注意:DataGuard不能防护逻辑误操作,必须定期RMAN备份。

复制代码
rman target /

configure retention policy to recovery window of 31 days;
backup database plus archivelog tag='FULL_BACKUP';
backup current controlfile for standby;

2.10 Oracle原地升级实操(AutoUpgrade工具,19c示例)

原地升级:同一主机,安装新版本Oracle软件,升级现有数据库。

  1. 执行预检查,生成预升级报告

    java -jar /fgedudb/oracle/rdbms/admin/autoupgrade.jar -mode precheck -config /fgedudb/tmp/au_config.cfg

预检查报告输出,修复所有ERROR级别问题。

  1. 执行升级,模式deploy

    java -jar /fgedudb/oracle/rdbms/admin/autoupgrade.jar -mode deploy -config /fgedudb/tmp/au_config.cfg

升级完成,登录数据库编译无效对象

复制代码
@?/rdbms/admin/utlrp.sql
select owner,object_name,object_type from dba_objects where status='INVALID';

2.11 RMAN duplicate迁移数据库到新主机实操

源库fgedudb,目标新主机,目标库同名。

目标主机实例启动nomount,密码文件拷贝,tns配置完成。

复制代码
rman target sys/fgedudb@fgedudb_pri auxiliary sys/fgedudb@fgedudb_new

run {
allocate channel src1 type disk;
allocate auxiliary channel dst1 type disk;
duplicate target database to fgedudb_new nofilenamecheck;
}

2.12 数据泵expdp/impdp逻辑迁移实操

复制代码
#源库导出
expdp fgedu/fgedudb@fgedudb_pri directory=DATA_PUMP_DIR dumpfile=fgedu_schema.dmp schemas=fgedu logfile=exp_fgedu.log
#目标库导入
impdp fgedu/fgedudb@fgedudb_new directory=DATA_PUMP_DIR dumpfile=fgedu_schema.dmp remap_schema=fgedu:fgedu logfile=imp_fgedu.log transform=oid:n

2.13 可传输表空间TTS迁移实操

  1. 源库将表空间置为只读

    alter tablespace users read only;

  2. expdp执行可传输表空间导出元数据

    expdp system/fgedudb@fgedudb_pri directory=DATA_PUMP_DIR dumpfile=tts_users.dmp transport_tablespaces=users transport_full_check=y logfile=exp_tts.log

  3. 将users数据文件拷贝至目标主机/fgedudb/oradata/fgedudb_new目录。

  4. 目标库执行impdp导入元数据,关联已经拷贝过来的数据文件。

    impdp system/fgedudb@fgedudb_new directory=DATA_PUMP_DIR dumpfile=tts_users.dmp transport_datafiles='/fgedudb/oradata/fgedudb_new/users01.dbf' logfile=imp_tts.log

  5. 源库、目标库将表空间置读写模式。

    alter tablespace users read write;

2.14 升级迁移项目标准工作流程

  1. 需求确认:确认版本目标、停机窗口、RPO/RTO、业务兼容要求;
  2. 方案选型:原地升级/RMAN复制/TTS/数据泵/PDB插拔;
  3. 预检查:执行预升级脚本,修复所有错误;做源库完整RMAN备份,准备回退方案;
  4. 测试环境完整演练整套升级迁移全流程,统计实际耗时;
  5. 生产业务窗口执行升级或者迁移;
  6. 升级迁移完成:编译无效对象,业务功能验证、性能验证;
  7. 观察业务运行,确认稳定,归档项目文档。

2.15 DG容灾故障排查要点

  1. show configuration出现warning:看报错信息,检查tns连通性、密码文件、standby redo log;
  2. transport_lag传输延迟大:排查网络带宽、LNS进程状态;
  3. apply_lag应用延迟大:备库MRP进程状态,检查归档日志是否完整传输;
  4. switchover失败:确认standby redo log两边完整存在,所有归档全部应用完毕。

三、风哥针对本文总结

本套风哥教程完整覆盖Oracle DataGuard容灾体系、RPO/RTO指标、物理备库、逻辑备库、快照备库,LGWR/LNS/RFS/MRP进程,三种保护模式,ADG、Far Sync,switchover/failover/FSFO自动故障切换,DGMGRL Broker管理;同时讲解RMAN备份,原地升级AutoUpgrade,RMAN duplicate、数据泵、可传输表空间TTS多套迁移方案,完整实操命令,容灾与升级迁移项目流程与故障排查。

  1. DataGuard容灾只能防范硬件、机房灾难,不能防护逻辑误操作;生产环境必须同时配置RMAN备份,备份和容灾二者缺一不可
  2. 三种保护模式,金融业务优先使用最大可用模式MaxAvailability;同步传输,备库异常自动降级异步,不会造成主库挂起;最大保护模式备库故障主库直接挂起,对网络可靠性要求极高。
  3. ADG活动数据卫士,物理备库可以只读打开同时做redo应用,可以承担报表、备份查询业务,充分利用灾备硬件资源;生产DG项目优先部署ADG。
  4. Switchover是计划性互换角色,零数据丢失,适合维护演练;Failover是真实灾难故障切换,存在丢失数据风险,切换后旧主库需要重建;FSFO自动故障切换Observer进程尽量部署第三台独立主机,避免单点故障。
  5. DGMGRL Broker管理工具强烈推荐生产使用,统一管理DG配置,降低手工alter命令带来的人为操作失误风险;部署DG务必两边配置standby redo log。
  6. 升级迁移方案选型:原地升级适合同主机版本迭代;RMAN duplicate适合同字节序平台物理迁移;TTS适合超大库快速迁移;数据泵适合跨平台、跨字符集逻辑改造。
  7. 升级迁移项目硬性规范:迁移前完整备份,必须准备回退预案;正式上线前,测试环境完整全流程演练,统计真实耗时;升级结束务必执行utlrp.sql编译无效对象,做业务功能与性能双重验证。
  8. Far Sync实例用于远距离两地三中心架构;快照备库适合临时测试,测试结束必须转换回physical standby,否则不再继续同步主库redo。
相关推荐
蓝速科技2 小时前
口岸政务窗口双屏翻译机落地应用指南
运维·数据结构·数据库·人工智能·科技·政务
盛世宏博智慧档案2 小时前
档案环境治理一体机感知‑计算‑执行闭环架构与物联网协议适配方案
物联网·架构
真上帝的左手3 小时前
27. 数据产品- BI - AI 应用实战终篇-从 RAG 架构到企业级平台落地
大数据·人工智能·架构
wudongfang6663 小时前
mysql全量同步数据改增量
数据库·mysql
东方佑3 小时前
当架构开始为存储让路:DeepSeek-V4.1-Flash 与一场静默的范式转移
架构
Sylvia33.3 小时前
板球实时数据接入实战:从Frames模型到多赛制适配
java·python·websocket·网络协议·架构
志栋智能3 小时前
超自动化安全的变更与配置安全管理
数据库·安全·自动化
toooooop83 小时前
thinkphp查询数据表最后的自增id
前端·javascript·数据库
爱吃红星柚3 小时前
【学习】框架设计(DSL + 领域模型)(2)基于vue3完成动态组件库建设
架构