Oracle Patch RU 详细操作

Oracle Patch RU 详细操作

适用版本:Oracle Database 19c 文档版本:v1.0 / 2026-07


1. 概述

Oracle 19c 采用 RU(Release Update)模型[1]:

类型

  • RU(Release Update)
  • RUR(Release Update Revision)
  • One-off patches

详细见:Oracle 补丁应用与 PSU


2. RU 模型

2.1 季度发布

- 1月、4月、7月、10月
- 每季度
- 包含 bug 修复 + 安全

2.2 命名

19.19.0.0.230418
- 19:版本
- 19:RU 序号
- 230418:2023-04-18

3. 准备

3.1 下载

- My Oracle Support
- Patch 6880880:OPatch 最新
- Patch XXXXX:RU

3.2 备份

- ORACLE_HOME 备份
- 数据库全备份
- Opatch 备份

3.3 检查

$ORACLE_HOME/OPatch/opatch version
$ORACLE_HOME/OPatch/opatch lsinventory

4. OPatch 升级

4.1 下载

Patch 6880880

4.2 升级

cd $ORACLE_HOME
mv OPatch OPatch.old
unzip /tmp/p6880880_190000_Linux-x86-64.zip -d $ORACLE_HOME
./OPatch/opatch version

5. 单实例应用 RU

5.1 停数据库

sqlplus / as sysdba
SHUTDOWN IMMEDIATE;
EXIT

# 停监听
lsnrctl stop

5.2 应用 RU

cd $ORACLE_HOME
unzip /tmp/p34765931_190000_Linux-x86-64.zip -d /tmp

$ORACLE_HOME/OPatch/opatch apply -silent /tmp/34765931

5.3 root

# 部分 RU 需要 root
su -
$ORACLE_HOME/OPatch/opatch apply -silent /tmp/34765931

5.4 数据字典

sqlplus / as sysdba
STARTUP UPGRADE;
EXIT

cd $ORACLE_HOME/OPatch
./datapatch -verbose

5.5 验证

sqlplus / as sysdba
SELECT version, status FROM dba_registry;
SELECT patch_id, status FROM dba_registry_sqlpatch;
EXIT

$ORACLE_HOME/OPatch/opatch lsinventory

6. RAC 应用 RU

6.1 滚动

- 节点 1:停 → 升级 → 启
- 节点 2:停 → 升级 → 启
- 业务零停

6.2 节点 1

# 停实例
srvctl stop instance -db orcl -node rac1

# GI 软件升级
cd $GI_HOME
$GI_HOME/OPatch/opatch apply /tmp/34765931 -oh $GI_HOME

# DB 软件升级
cd $ORACLE_HOME
$ORACLE_HOME/OPatch/opatch apply /tmp/34765931 -oh $ORACLE_HOME

# 启实例
srvctl start instance -db orcl -node rac1

6.3 节点 2

同上。

6.4 datapatch

sqlplus / as sysdba
ALTER SYSTEM SET cluster_database=false SCOPE=spfile;
srvctl stop db -db orcl
srvctl start instance -db orcl -node rac1 -o upgrade

cd $ORACLE_HOME/OPatch
./datapatch -verbose

ALTER SYSTEM SET cluster_database=true SCOPE=spfile;
srvctl stop db -db orcl
srvctl start db -db orcl

详细见:Oracle RAC 部署实战


7. GI + DB

7.1 GI 升级

# root
cd $GI_HOME
$GI_HOME/OPatch/opatchauto apply /tmp/34765931 -oh $GI_HOME

7.2 DB 升级

cd $ORACLE_HOME
$ORACLE_HOME/OPatch/opatchauto apply /tmp/34765931 -oh $ORACLE_HOME

8. Out-of-Place

8.1 流程

1. 安装新 ORACLE_HOME(带最新 RU)
2. 升级
3. 切换
4. 删除旧 ORACLE_HOME

8.2 安装新 HOME

mkdir -p ******
chown oracle:oinstall /u01/app/oracle/product/19.0.0/dbhome_2

su - oracle
cd /u01/app/oracle/product/19.0.0/dbhome_2
unzip /tmp/LINUX.X64_193000_db_home.zip

./runInstaller -silent -responseFile /tmp/db_install.rsp \
  -applyRU /tmp/34765931

8.3 切换

# 修改 oracle 用户环境变量
# ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_2

# 修改 /etc/oratab
orcl:/u01/app/oracle/product/19.0.0/dbhome_2:Y

# 重新启动
srvctl modify database -db orcl -oraclehome /u01/app/oracle/product/19.0.0/dbhome_2
srvctl stop database -db orcl
srvctl start database -db orcl

8.4 datapatch

cd $ORACLE_HOME/OPatch
./datapatch -verbose

8.5 删除旧

cd /u01/app/oracle/product/19.0.0/dbhome_1/deinstall
./deinstall -silent

9. 回滚

9.1 opatch rollback

$ORACLE_HOME/OPatch/opatch rollback -id 34765931

9.2 datapatch

cd $ORACLE_HOME/OPatch
./datapatch -verbose

10. 验证

10.1 软件

$ORACLE_HOME/OPatch/opatch lsinventory
$ORACLE_HOME/OPatch/opatch lsinventory -details

10.2 数据库

SELECT version, status FROM dba_registry;
SELECT patch_id, action, status, action_time 
FROM dba_registry_sqlpatch 
ORDER BY action_time DESC;

SELECT instance_name, version, status FROM v$instance;

11. 常见坑与排错

11.1 ORA-01092

- 升级后启动失败
- 查 alert log
- datapatch

11.2 OPatch 失败

- 备份 ORACLE_HOME
- opatch rollback
- 重试

11.3 datapatch 失败

SELECT * FROM dba_registry_sqlpatch WHERE status != 'SUCCESS';
-- 查日志
$ORACLE_BASE/cfgtoollogs/sqlpatch

11.4 Inventory 损坏

./runInstaller -silent -attachHome ORACLE_HOME=... ORACLE_HOME_NAME=...

12. 最佳实践

  1. OPatch 最新:基础
  2. 备份:应急
  3. 测试环境:先验证
  4. 业务低峰:应用
  5. 滚动 RAC:零停
  6. Out-of-Place:推荐
  7. datapatch:必执行
  8. 验证:完整
  9. 回滚方案:准备
  10. 文档化:流程

13. 参考资料

[1] Oracle Database 19c Release Updates https://support.oracle.com/