










企业级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脚本,读者可以在测试环境复现容灾搭建、角色切换、升级迁移全流程,掌握容灾建设、版本升级、数据迁移整套生产落地手段。网上搜索风哥教程可以学习全套数据库教程
本章节为本套风哥教程理论基础,理清容灾架构原理、保护模式差异,区分各类升级迁移方案的优缺点,才能根据业务RPO/RTO指标,合理设计容灾与迁移改造方案,规避生产数据丢失风险。风哥教程 113257174
DataGuard由一台主库(Primary)与一台或者多台备库(Standby)共同组成,主库产生Redo日志,通过网络传输到备库,备库应用Redo日志保持数据同步。备库分为四类:
进程说明:
DGMGRL是Data Guard官方命令行管理工具,可以统一管理整个DG配置,统一修改保护模式、执行切换、状态监控,代替大量手工alter数据库命令;生产环境强烈推荐部署Broker,减少手工操作失误。网上搜索风哥教程可以学习全套数据库教程
RMAN是Oracle官方备份工具,支持全库备份、增量备份、归档日志备份。容灾不能完全替代备份:DG抵御机房故障,但是无法抵御逻辑错误(误drop表、误delete数据),逻辑损坏会同步传播到备库。RMAN备份+DataGuard容灾需要同时建设。
升级迁移核心原则:迁移前做完整备份;业务低峰执行;完整回退预案;迁移完成业务验证。上51CTO搜索风哥可以学习全套数据库教程
本套风哥教程全部实战操作,操作主机fgedu‑net‑cn,主库fgedudb,备库fgedudb_stby,业务用户fgedu,目录/fgedudb,硬件规格64G内存8CPU。
环境说明:操作系统oracle用户;主备库ORACLE_HOME均指向
/fgedudb;主备库tnsnames网络互通;DG操作大量需要sysdba权限。
#确认主机名称
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颗。
登录主库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,备库数据文件自动管理,主库增删数据文件备库自动同步。
create user fgedu identified by fgedudb default tablespace users temporary tablespace temp;
grant connect,resource to fgedu;
grant select_catalog_role to fgedu;
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;
编辑/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))
)
备库端启动实例到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状态。
备库sqlplus / as sysdba
alter database open read only;
alter database recover managed standby database using current logfile disconnect from session;
此时ADG生效,备库只读打开同时持续应用redo日志。风哥数据库教程 itpux‑com
主库、备库两边都执行:
alter system set dg_broker_start=true scope=both;
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配置正常。网上搜索风哥教程可以学习全套数据库教程
edit configuration set protection mode as maxavailability;
show configuration;
计划维护演练,主备互换角色,业务无数据丢失。
validate database fgedudb_pri;
validate database fgedudb_stby;
switchover to fgedudb_stby;
show configuration;
切换完成,原备库fgedudb_stby变为新主库;原主库fgedudb_pri自动转为备库,启动redo应用。切换完成验证业务读写,验证redo同步正常。
仅主库真实故障不可访问才执行failover,存在丢失数据风险。
failover to fgedudb_stby;
show configuration;
执行完成,备库提升为主库;旧主库损坏,需要重建之后才能重新加入DG配置。
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 &
物理备库临时切换读写快照备库,用于测试业务。
convert database fgedudb_stby to snapshot standby;
show configuration;
测试业务完成,转回物理备库,丢弃快照变更,继续同步主库redo:
convert database fgedudb_stby to physical standby;
show configuration;
上51CTO搜索风哥可以学习全套数据库教程
--查看数据库角色、切换状态
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;
注意: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;
原地升级:同一主机,安装新版本Oracle软件,升级现有数据库。
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';
源库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;
}
#源库导出
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
alter tablespace users read only;
expdp system/fgedudb@fgedudb_pri directory=DATA_PUMP_DIR dumpfile=tts_users.dmp transport_tablespaces=users transport_full_check=y logfile=exp_tts.log
/fgedudb/oradata/fgedudb_new目录。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
alter tablespace users read write;
本套风哥教程完整覆盖Oracle DataGuard容灾体系、RPO/RTO指标、物理备库、逻辑备库、快照备库,LGWR/LNS/RFS/MRP进程,三种保护模式,ADG、Far Sync,switchover/failover/FSFO自动故障切换,DGMGRL Broker管理;同时讲解RMAN备份,原地升级AutoUpgrade,RMAN duplicate、数据泵、可传输表空间TTS多套迁移方案,完整实操命令,容灾与升级迁移项目流程与故障排查。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。