Oracle 补丁应用与 PSU

Oracle 补丁应用与 PSU

适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Oracle 补丁类型[1]:

类型

  • Release Update (RU)
  • Release Update Revision (RUR)
  • One-off Patch
  • CPU(Critical Patch Update)

2. 补丁类型

2.1 RU(19c+)

  • 季度发布
  • 包含 bug 修复
  • 推荐应用

2.2 RUR

  • RU 修订版
  • 仅 bug 修复

2.3 One-off

  • 单一 bug
  • 临时补丁

2.4 CPU

  • 安全补丁
  • 集成到 RU

3. 准备

3.1 下载

https://support.oracle.com

3.2 OPatch 升级

# 1. 备份旧 OPatch
mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch.old

# 2. 解压新版
unzip p6880880_Linux-x86-64.zip -d $ORACLE_HOME/

# 3. 验证
$ORACLE_HOME/OPatch/opatch version

3.3 检查冲突

$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph /tmp/XXXXXX

4. 应用 RU

4.1 GI + DB(合并补丁)

# root 用户
opatchauto apply /tmp/XXXXXX

4.2 仅 DB

# 1. 关闭数据库
srvctl stop database -db orcl

# 2. 应用
cd /tmp/XXXXXX
$ORACLE_HOME/OPatch/opatch apply -silent

# 3. 启动
srvctl start database -db orcl

4.3 仅 GI

# root
opatchauto apply /tmp/XXXXXX -oh /u01/app/19.0.0/grid

5. 应用 One-off

5.1 关闭

# 单实例
sqlplus / as sysdba
SQL> SHUTDOWN IMMEDIATE;
SQL> EXIT;

lsnrctl stop

5.2 应用

cd /tmp/PATCH_DIR
$ORACLE_HOME/OPatch/opatch apply

5.3 启动

lsnrctl start
sqlplus / as sysdba
SQL> STARTUP;

6. 数据字典补丁

6.1 datapatch

# 应用补丁后
cd $ORACLE_HOME/OPatch
./datapatch -verbose

6.2 验证

SQL> SELECT * FROM dba_registry_sqlpatch;
SQL> SELECT patch_id, status, action_time FROM dba_registry_sqlpatch;

7. RAC 应用

7.1 滚动升级

# 节点 1
srvctl stop instance -db orcl -instance orcl1
opatch apply

# 节点 2
srvctl stop instance -db orcl -instance orcl2
opatch apply

7.2 验证

# 各节点
$ORACLE_HOME/OPatch/opatch lsinventory

8. 回滚

8.1 回滚补丁

cd /tmp/XXXXXX
$ORACLE_HOME/OPatch/opatch rollback -id <patch_id>

8.2 datapatch

./datapatch -verbose

9. 验证

9.1 Inventory

$ORACLE_HOME/OPatch/opatch lsinventory
$ORACLE_HOME/OPatch/opatch lsinventory -all

9.2 数据库

SQL> SELECT * FROM dba_registry_sqlpatch;
SQL> SELECT version, status FROM dba_registry;
SQL> SELECT * FROM v$version;

10. OPlan

10.1 计划

# 推荐顺序
$ORACLE_HOME/OPatch/oplan/oplan install /tmp/XXXXXX

10.2 报告

cat /tmp/XXXXXX/oplan_results/apply_plan.html

11. 自动化脚本

#!/bin/bash
# apply_patch.sh

PATCH_DIR=$1

# 1. 关闭
echo "Stopping Oracle..."
su - oracle -c "
sqlplus / as sysdba <<EOF
SHUTDOWN IMMEDIATE;
EXIT;
EOF
"

# 2. 应用
echo "Applying patch..."
su - oracle -c "
cd $PATCH_DIR
\$ORACLE_HOME/OPatch/opatch apply -silent
"

# 3. 启动
echo "Starting Oracle..."
su - oracle -c "
sqlplus / as sysdba <<EOF
STARTUP;
EXIT;
EOF
"

# 4. datapatch
echo "Running datapatch..."
su - oracle -c "
cd \$ORACLE_HOME/OPatch
./datapatch -verbose
"

echo "Done."

12. 常见坑与排错

12.1 冲突

# 1. 检查冲突
opatch prereq CheckConflictAgainstOHWithDetail -ph ...

# 2. 解决
# - 回滚冲突补丁
# - 联系 Oracle Support

12.2 OCM 缺失

# 创建 OCM 响应文件
$ORACLE_HOME/OPatch/ocm/bin/emocmrsp -output /tmp/ocm.rsp

# 应用
opatch apply -ocmrf /tmp/ocm.rsp

12.3 空间不足

# 检查 ORACLE_HOME 空间
df -h $ORACLE_HOME

# 清理旧补丁
opatch util cleanup

13. 最佳实践

  1. 测试环境先:验证
  2. OPatch 最新:兼容
  3. CVU 检查:准备
  4. 备份 ORACLE_HOME:回滚
  5. 关闭数据库:安全
  6. datapatch:数据字典
  7. 验证:完整性
  8. 滚动升级:RAC
  9. 业务低峰:影响小
  10. 文档化:记录

14. 参考资料

[1] Oracle Database Patching Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/ARPLN/