# 数据库教程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级别问题。
2. 执行升级,模式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。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
