本文档详细介绍Oracle DataGuard环境下的数据库升级方法和最佳实践,风哥教程参考Oracle官方文档Upgrade部分。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 升级概述
在DataGuard环境下进行数据库升级是一个复杂的过程,需要确保主备数据库的一致性和可用性。学习交流加群风哥微信: itpux-com
升级的特点:
- 需要协调主备数据库的升级顺序
- 确保升级过程中数据的一致性
- 最小化系统 downtime
- 提供回滚机制,以防升级失败
1.2 升级方法
DataGuard环境下的升级方法:
- 滚动升级:先升级备用数据库,然后执行切换,再升级原主数据库
- 并行升级:同时升级主备数据库(适用于计划内停机)
- 重建备用数据库:升级主数据库后,重建备用数据库
1.3 升级注意事项
升级过程中的注意事项:
- 备份:在升级前备份主备数据库
- 兼容性:确保新版本与应用程序兼容
- 测试:在测试环境中进行升级测试
- 监控:升级过程中密切监控系统状态
- 回滚:准备详细的回滚计划
Part02-生产环境规划与建议
2.1 升级前准备
升级前的准备工作:
- 制定详细的升级计划
- 备份主备数据库
- 测试应用程序兼容性
- 准备回滚计划
- 通知相关人员
2.2 升级计划
升级计划应包括:
- 升级时间窗口:选择业务低峰期
- 升级步骤:详细的步骤和时间估计
- 责任分配:明确各角色的责任
- 测试计划:升级后的测试步骤
- 应急方案:处理升级过程中的问题
2.3 回滚策略
回滚策略应包括:
- 备份恢复:使用备份恢复到升级前状态
- 切换回原版本:如果升级失败,切换回原主数据库
- 回滚步骤:详细的回滚步骤
- 测试:回滚后的测试步骤
Part03-生产环境项目实施方案
DataGuard环境下的升级实施步骤:
- 备份主备数据库
- 升级备用数据库
- 验证备用数据库升级成功
- 执行DataGuard切换,将备用数据库转换为主数据库
- 升级原主数据库
- 将原主数据库转换为备用数据库
- 验证DataGuard环境正常运行
Part04-生产案例与实战讲解
4.1 升级前准备
# 备份主数据库
rman target /
BACKUP DATABASE PLUS ARCHIVELOG;
# 输出日志
Starting backup at 01-APR-26
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=123 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/oradata/fgedudb/system01.dbf
input datafile file number=00002 name=/oradata/fgedudb/sysaux01.dbf
input datafile file number=00003 name=/oradata/fgedudb/undotbs01.dbf
input datafile file number=00004 name=/oradata/fgedudb/users01.dbf
channel ORA_DISK_1: starting piece 1 at 01-APR-26
channel ORA_DISK_1: finished piece 1 at 01-APR-26
piece handle=/backup/fgedudb/backup_1_1_1234567890.bkp tag=TAG20260401T100000 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:05:00
# 备份备用数据库
rman target sys/password@STANDBY
BACKUP DATABASE PLUS ARCHIVELOG;
rman target /
BACKUP DATABASE PLUS ARCHIVELOG;
# 输出日志
Starting backup at 01-APR-26
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=123 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00001 name=/oradata/fgedudb/system01.dbf
input datafile file number=00002 name=/oradata/fgedudb/sysaux01.dbf
input datafile file number=00003 name=/oradata/fgedudb/undotbs01.dbf
input datafile file number=00004 name=/oradata/fgedudb/users01.dbf
channel ORA_DISK_1: starting piece 1 at 01-APR-26
channel ORA_DISK_1: finished piece 1 at 01-APR-26
piece handle=/backup/fgedudb/backup_1_1_1234567890.bkp tag=TAG20260401T100000 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:05:00
# 备份备用数据库
rman target sys/password@STANDBY
BACKUP DATABASE PLUS ARCHIVELOG;
4.2 升级备用数据库
# 停止备用数据库的应用服务
sqlplus / as sysdba@STANDBY
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
# 输出日志
Database altered.
# 关闭备用数据库
SHUTDOWN IMMEDIATE;
# 输出日志
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
# 升级Oracle软件
# 运行Oracle安装程序,选择升级选项
# 启动备用数据库到升级模式
STARTUP UPGRADE;
# 输出日志
ORACLE instance started.
Total System Global Area 1610612736 bytes
Fixed Size 8896784 bytes
Variable Size 536870912 bytes
Database Buffers 1073741824 bytes
Redo Buffers 7864320 bytes
Database mounted.
Database opened in upgrade mode.
# 运行升级脚本
@$ORACLE_HOME/rdbms/admin/catupgrd.sql
# 输出日志
# 升级过程日志…
# 运行编译脚本
@$ORACLE_HOME/rdbms/admin/utlrp.sql
# 输出日志
# 编译过程日志…
sqlplus / as sysdba@STANDBY
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
# 输出日志
Database altered.
# 关闭备用数据库
SHUTDOWN IMMEDIATE;
# 输出日志
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
# 升级Oracle软件
# 运行Oracle安装程序,选择升级选项
# 启动备用数据库到升级模式
STARTUP UPGRADE;
# 输出日志
ORACLE instance started.
Total System Global Area 1610612736 bytes
Fixed Size 8896784 bytes
Variable Size 536870912 bytes
Database Buffers 1073741824 bytes
Redo Buffers 7864320 bytes
Database mounted.
Database opened in upgrade mode.
# 运行升级脚本
@$ORACLE_HOME/rdbms/admin/catupgrd.sql
# 输出日志
# 升级过程日志…
# 运行编译脚本
@$ORACLE_HOME/rdbms/admin/utlrp.sql
# 输出日志
# 编译过程日志…
4.3 验证备用数据库升级
# 验证数据库版本
sqlplus / as sysdba@STANDBY
SELECT * FROM v$version;
# 输出日志
BANNER
——————————————————————————–
Oracle Database 19c Enterprise Edition Release 19.3.0.0.0 – Production
PL/SQL Release 19.3.0.0.0 – Production
CORE 19.3.0.0.0 Production
TNS for Linux: Version 19.3.0.0.0 – Production
NLSRTL Version 19.3.0.0.0 – Production
# 启动备用数据库到mount状态
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
# 输出日志
ORACLE instance started.
Total System Global Area 1610612736 bytes
Fixed Size 8896784 bytes
Variable Size 536870912 bytes
Database Buffers 1073741824 bytes
Redo Buffers 7864320 bytes
Database mounted.
sqlplus / as sysdba@STANDBY
SELECT * FROM v$version;
# 输出日志
BANNER
——————————————————————————–
Oracle Database 19c Enterprise Edition Release 19.3.0.0.0 – Production
PL/SQL Release 19.3.0.0.0 – Production
CORE 19.3.0.0.0 Production
TNS for Linux: Version 19.3.0.0.0 – Production
NLSRTL Version 19.3.0.0.0 – Production
# 启动备用数据库到mount状态
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
# 输出日志
ORACLE instance started.
Total System Global Area 1610612736 bytes
Fixed Size 8896784 bytes
Variable Size 536870912 bytes
Database Buffers 1073741824 bytes
Redo Buffers 7864320 bytes
Database mounted.
4.4 执行DataGuard切换
# 使用DataGuard Broker执行切换
dgmgrl sys/password@PRIMARY
# 输出日志
DGMGRL for Linux: Release 12.2.0.1.0 – Production on Fri Apr 1 10:00:00 2026
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type “help” for information.
Connected to “fgedudb”
Connected as SYSDBA.
# 执行切换
SWITCHOVER TO ‘fgedudb_stby’;
# 输出日志
Performing switchover NOW, please wait…
Operation requires a connection to database “fgedudb_stby”
Connecting …
Connected to “fgedudb_stby”
Connected as SYSDBA.
New primary database “fgedudb_stby” is opening…
Operation requires start up of instance “fgedudb” on database “fgedudb”
Starting instance “fgedudb”…
ORACLE instance started.
Database mounted.
Database opened.
Switchover succeeded, new primary is “fgedudb_stby”
dgmgrl sys/password@PRIMARY
# 输出日志
DGMGRL for Linux: Release 12.2.0.1.0 – Production on Fri Apr 1 10:00:00 2026
Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type “help” for information.
Connected to “fgedudb”
Connected as SYSDBA.
# 执行切换
SWITCHOVER TO ‘fgedudb_stby’;
# 输出日志
Performing switchover NOW, please wait…
Operation requires a connection to database “fgedudb_stby”
Connecting …
Connected to “fgedudb_stby”
Connected as SYSDBA.
New primary database “fgedudb_stby” is opening…
Operation requires start up of instance “fgedudb” on database “fgedudb”
Starting instance “fgedudb”…
ORACLE instance started.
Database mounted.
Database opened.
Switchover succeeded, new primary is “fgedudb_stby”
4.5 升级原主数据库
# 停止原主数据库(现在是备用数据库)
sqlplus / as sysdba
SHUTDOWN IMMEDIATE;
# 输出日志
Database closed.
Database dismounted.
ORACLE instance shut down.
# 升级Oracle软件
# 运行Oracle安装程序,选择升级选项
# 启动数据库到升级模式
STARTUP UPGRADE;
# 输出日志
ORACLE instance started.
Total System Global Area 1610612736 bytes
Fixed Size 8896784 bytes
Variable Size 536870912 bytes
Database Buffers 1073741824 bytes
Redo Buffers 7864320 bytes
Database mounted.
Database opened in upgrade mode.
# 运行升级脚本
@$ORACLE_HOME/rdbms/admin/catupgrd.sql
# 输出日志
# 升级过程日志…
# 运行编译脚本
@$ORACLE_HOME/rdbms/admin/utlrp.sql
# 输出日志
# 编译过程日志…
sqlplus / as sysdba
SHUTDOWN IMMEDIATE;
# 输出日志
Database closed.
Database dismounted.
ORACLE instance shut down.
# 升级Oracle软件
# 运行Oracle安装程序,选择升级选项
# 启动数据库到升级模式
STARTUP UPGRADE;
# 输出日志
ORACLE instance started.
Total System Global Area 1610612736 bytes
Fixed Size 8896784 bytes
Variable Size 536870912 bytes
Database Buffers 1073741824 bytes
Redo Buffers 7864320 bytes
Database mounted.
Database opened in upgrade mode.
# 运行升级脚本
@$ORACLE_HOME/rdbms/admin/catupgrd.sql
# 输出日志
# 升级过程日志…
# 运行编译脚本
@$ORACLE_HOME/rdbms/admin/utlrp.sql
# 输出日志
# 编译过程日志…
4.6 配置原主数据库为备用数据库
# 启动原主数据库到mount状态
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
# 输出日志
ORACLE instance started.
Total System Global Area 1610612736 bytes
Fixed Size 8896784 bytes
Variable Size 536870912 bytes
Database Buffers 1073741824 bytes
Redo Buffers 7864320 bytes
Database mounted.
# 启动备用数据库的应用服务
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
# 输出日志
Database altered.
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
# 输出日志
ORACLE instance started.
Total System Global Area 1610612736 bytes
Fixed Size 8896784 bytes
Variable Size 536870912 bytes
Database Buffers 1073741824 bytes
Redo Buffers 7864320 bytes
Database mounted.
# 启动备用数据库的应用服务
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
# 输出日志
Database altered.
4.7 验证DataGuard环境
# 验证新主数据库状态
dgmgrl sys/password@fgedudb_stby
SHOW CONFIGURATION;
# 输出日志
Configuration – fgedudb_dg
Protection Mode: MaxAvailability
Members:
fgedudb_stby – Primary database
fgedudb – Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS (status updated 32 seconds ago)
dgmgrl sys/password@fgedudb_stby
SHOW CONFIGURATION;
# 输出日志
Configuration – fgedudb_dg
Protection Mode: MaxAvailability
Members:
fgedudb_stby – Primary database
fgedudb – Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS (status updated 32 seconds ago)
Part05-风哥经验总结与分享
5.1 升级最佳实践
- 使用滚动升级方法,最小化系统 downtime
- 在测试环境中进行充分的升级测试
- 制定详细的升级计划和回滚策略
- 升级过程中密切监控系统状态
- 升级后进行全面的测试,确保系统正常运行
5.2 常见问题与解决方案
- 升级失败:使用备份恢复到升级前状态,或切换回原主数据库
- 应用程序兼容性问题:在测试环境中充分测试应用程序
- DataGuard同步问题:检查重做传输和应用服务状态
- 性能问题:升级后进行性能调优
- 空间不足:在升级前确保有足够的存储空间
5.3 性能优化建议
- 升级前清理数据库,减少升级时间
- 使用并行升级,提高升级速度
- 升级后收集统计信息,优化查询性能
- 调整数据库参数,适应新版本的特性
- 监控升级后的系统性能,及时发现和解决问题
学习交流加群风哥QQ113257174
风哥提示:DataGuard环境下的数据库升级需要仔细规划和执行,确保主备数据库的一致性和可用性。
更多学习教程公众号风哥教程itpux_com
from oracle:www.itpux.com
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
