Oracle ACE

Oracle 26ai

Oracle AI Database 26ai 季度补丁升级指南

00. 写在前面

Oracle AI Database 26ai 从 2026 年开始按季度推送 Release Update(RU),版本号第三位就是季度标识。4 月份发布的 23.26.2.0.0 是首个季度补丁,笔者在自己的测试环境上从 23.26.1 升到了 23.26.2,全程走了一遍传统 OPatch 流程。

但这里有个大新闻:从 26ai 开始,Oracle 正式推出了 Gold Image 补丁方式。这种方式是基于“干净的、预先打好补丁的镜像(Image-based)”来实现 Out-of-Place 升级。直接解压一个已经包含了最新 RU(Release Update)补丁的、干净的 Oracle 软件安装包(即 Gold Image)到新的目录,然后直接将数据库实例的启动路径切换过去。

官方甚至把 OPatch/OPatchAuto 的 out-of-place 方式标记为 deprecated。这意味着 DBA 的补丁思维需要升级了。这里需要特别注意的是:“Out-of-Place(零停机/低停机时间)打补丁”这种运维概念本身并没有被否定。相反,Oracle 官方目前依然强烈推荐使用 Out-of-Place 方式来降低升级风险。真正被弃用的是“实现这一概念的旧工具/旧方法(即通过 OPatch/OPatchAuto 内部进行克隆)”。因为旧工具会把过去所有的旧补丁历史(如 .patch_storage 目录等碎片文件)和历史垃圾也一并复制过去。这不仅导致新的 ORACLE_HOME 极其臃肿,还非常容易引发各种意想不到的配置冲突。

本文把笔者实测的 OPatch 流程原原本本记录下来,同时把 Gold Image 这个新范式讲清楚,供各位同行参考。

01. 26ai 的版本号规则与补丁节奏

1.1 版本号怎么读

26ai 改变了传统的版本号命名逻辑,固定主版本号为 23.26.x:

版本号 发布时间 含义
23.26.0.0.0 2025 年 10 月 初始 GA 版本
23.26.1.0.0 2026 年 1 月 2026 Q1 补丁
23.26.2.0.0 2026 年 4 月 2026 Q2 补丁(本文主角)
23.26.3.0.0 2026 年 7 月 2026 Q3 补丁(预计)
23.26.4.0.0 2026 年 10 月 2026 Q4 补丁(预计)

1.2 补丁交付的两种形态

从 26ai 开始,Oracle 每个季度的 RU 都以两种格式交付:

交付形态 本质 适用场景
Gold Image 完整的软件安装镜像(类似全新安装包) Out-of-place 升级,Oracle 强烈推荐
二进制补丁包 传统的 zip 补丁文件,用 OPatch 应用 In-place 升级,兼容旧习惯

Oracle 官方文档明确表示:“Oracle recommends that you use out-of-place patching using Gold images to apply quarterly release updates (RUs). The use of OPatch and OPatchAuto for out-of-place patching continues to be deprecated.”

02. 常规 OPatch 升级法

虽然 Gold Image 是趋势,但 OPatch 方式目前仍然完全可用,而且对于单实例测试环境来说,操作起来很直接。下面把笔者从 23.26.1 升到 23.26.2 的完整过程记录下来。

2.1 下载补丁包

从 MOS 下载两个文件:

文件 补丁号 大小 用途
p39093711_230000_Linux-x86-64.zip 39093711 2.77 GB Database Release Update 23.26.2
p6880880_230000_Linux-x86-64.zip 6880880 24.1 MB OPatch 工具升级包

下载地址:

2.2 停止相关服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 停止数据库
[oracle@rl9 ~]$ sqlplus / as sysdba

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit

# 停止监听器
[oracle@rl9 ~]$ lsnrctl stop

LSNRCTL for Linux: Version 23.26.1.0.0 - Production on 15-MAY-2026 11:04:41
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rl9.shawnyan.cn)(PORT=1521)))
The command completed successfully.

2.3 升级 OPatch 工具

先检查当前版本,然后替换为最新版:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 检查当前 OPatch 版本
[oracle@rl9 ~]$ $ORACLE_HOME/OPatch/opatch version
OPatch Version: 12.2.0.1.48
OPatch succeeded.

# 备份旧版 OPatch
[oracle@rl9 ~]$ mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch_bak_$(date +%Y%m%d)

# 解压新版 OPatch
[oracle@rl9 ~]$ unzip -o /tmp/p6880880_230000_Linux-x86-64.zip -d $ORACLE_HOME

# 修正权限
[oracle@rl9 ~]$ chmod -R 755 $ORACLE_HOME/OPatch
[oracle@rl9 ~]$ chown -R oracle:oinstall $ORACLE_HOME/OPatch

# 验证升级结果
[oracle@rl9 ~]$ $ORACLE_HOME/OPatch/opatch version
OPatch Version: 12.2.0.1.51
OPatch succeeded.

2.4 应用 RU 补丁

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 创建补丁目录并解压
[oracle@rl9 ~]$ mkdir -p $ORACLE_BASE/patches
[oracle@rl9 ~]$ mv /tmp/p39093711_230000_Linux-x86-64.zip $ORACLE_BASE/patches/
[oracle@rl9 ~]$ cd $ORACLE_BASE/patches/
[oracle@rl9 ~]$ unzip p39093711_230000_Linux-x86-64.zip

# 进入补丁目录
[oracle@rl9 ~]$ cd 39093711

# 预检查冲突
[oracle@rl9 39093711]$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Prereq "checkConflictAgainstOHWithDetail" passed.
OPatch succeeded.

# 查看当前已安装的补丁
[oracle@rl9 39093711]$ $ORACLE_HOME/OPatch/opatch lspatches -oh $ORACLE_HOME
38743688;OCW RELEASE UPDATE 23.26.1.0.0 (GOLD IMAGE) (38743688) Gold Image
38743669;Database Release Update : 23.26.1.0.0 (38743669) Gold Image
OPatch succeeded.

# 静默应用补丁
[oracle@rl9 39093711]$ $ORACLE_HOME/OPatch/opatch apply -silent ./
...
Patch 39093711 successfully applied.
Sub-set patch [38743669] has become inactive due to the application of a super-set patch [39093711].
OPatch succeeded.

注意这里的提示:“Sub-set patch has become inactive”,说明新补丁是旧补丁的超集,逻辑上很干净。

2.5 启动数据库并运行 datapatch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 启动数据库
[oracle@rl9 ~]$ sqlplus / as sysdba
SQL> startup
ORACLE instance started.
Database mounted.
Database opened.
SQL> alter pluggable database all open;
Pluggable database altered.

# 确认 PDB 状态
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 MYPDB1 READ WRITE NO

接下来运行 datapatch,这是升级 SQL 字典的关键步骤:

1
2
3
4
5
6
7
8
9
10
11
12
# 先做健全性检查
[oracle@rl9 ~]$ cd $ORACLE_HOME/OPatch
[oracle@rl9 OPatch]$ ./datapatch -sanity_checks

# 正式应用 SQL 补丁(详细模式)
[oracle@rl9 OPatch]$ ./datapatch -verbose
SQL Patching tool version 23.26.2.0.0 Production on Fri May 15 13:18:35 2026
...
Patch 39093711 apply (pdb CDB$ROOT): SUCCESS
Patch 39093711 apply (pdb PDB$SEED): SUCCESS
Patch 39093711 apply (pdb MYPDB1): SUCCESS
SQL Patching tool complete on Fri May 15 13:27:13 2026

datapatch 会自动处理 CDB$ROOT、PDB$SEED 和所有用户 PDB,不需要你手动逐个切换容器。

2.6 验证升级结果

1
2
3
4
5
6
SQL> select BANNER_FULL from v$version;

BANNER_FULL
--------------------------------------------------------------------------------
Oracle AI Database 26ai Enterprise Edition Release 23.26.2.0.0 - Production
Version 23.26.2.0.0

看到 23.26.2.0.0,说明二进制升级成功。再查一下补丁注册表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SET LINESIZE 200
COL PDB_NAME FORMAT A15
COL PATCH_ID FORMAT 9999999999
COL ACTION FORMAT A10
COL STATUS FORMAT A10

SELECT
p.name AS PDB_NAME,
h.patch_id,
h.action,
h.status,
h.description,
h.action_time
FROM v$pdbs p
JOIN cdb_registry_sqlpatch h ON p.con_id = h.con_id
ORDER BY h.action_time DESC;

输出:

1
2
3
4
PDB_NAME           PATCH_ID ACTION     STATUS     DESCRIPTION                              ACTION_TIME
--------------- ----------- ---------- ---------- ---------------------------------------- -------------------
MYPDB1 39093711 APPLY SUCCESS Database Release Update : 23.26.2.0.0 15-MAY-26 01.26.21 PM
MYPDB1 38743669 APPLY SUCCESS Database Release Update : 23.26.1.0.0 15-MAY-26 10.17.49 AM

CDB$ROOT、PDB$SEED、MYPDB1 三个容器全部 SUCCESS,升级完成。

2.7 启动监听并注册服务

1
[oracle@rl9 ~]$ lsnrctl start

监听版本也同步变成了 23.26.2.0.0。然后进数据库执行服务注册:

1
2
ALTER SYSTEM REGISTER;
ALTER SESSION SET CONTAINER = MYPDB1;

03. Gold Image 补丁方式(26ai 新范式)

3.1 什么是 Gold Image

Gold Image 是 Oracle 从 26ai 开始主推的补丁交付形态。你可以把它理解成一份"已经打好补丁的完整软件安装包",而不是传统的"补丁差分包"。

传统 OPatch 是 in-place 或 out-of-place 打差分补丁,Gold Image 则是直接给你一份全新的、完整的、已经集成好 RU 的软件镜像。你把它解压到一个新的 ORACLE_HOME,然后把数据库切过去就行。

3.2 为什么 Oracle 要推 Gold Image

笔者梳理了几点理由:

维度 传统 OPatch 方式 Gold Image 方式
停机时间 需要停止数据库,原地打补丁,时间较长 可提前在新 HOME 准备好,切换瞬间完成
回滚能力 回滚复杂,opatch rollback 容易出问题 旧 HOME 原封不动保留,切回去就是回滚
补丁冲突 多个 one-off 补丁容易冲突,需手动解决 Gold Image 已经预解决了冲突
操作复杂度 步骤多,容易出错 解压 → 切 HOME,两步搞定
配置漂移 原地修改容易引入配置漂移 新 HOME 干净,标准化程度高
RAC 场景 滚动补丁需要逐个节点操作,协调复杂 FPP 可一次性批量推送

Oracle MAA 博客说得直白:“With Gold images, teams can deploy a new GI and Oracle home from gold images, perform a switch home operation during maintenance windows, improve patching reliability and reduce configuration drift.”

3.3 Gold Image 手动升级步骤

对于单实例数据库,不用 FPP 也能手动完成 Gold Image 升级。核心思路是:

Step 1:下载 Gold Image

从 MOS 下载对应季度的 Gold Image 补丁包。比如 23.26.2 的 Gold Image 补丁号是 39093711 的 Gold Image 版本(注意和 binary patch 区分)。

Step 2:创建新的 Oracle Home

1
2
3
4
5
6
# 创建新的 HOME 目录
mkdir -p /u01/app/oracle/product/23.0.0/dbhome_2

# 解压 Gold Image(注意:Gold Image 是完整软件包,不是差分补丁)
cd /u01/app/oracle/product/23.0.0/dbhome_2
unzip -q /tmp/p39093711_230000_Linux-x86-64_GoldImage.zip

Step 3:使用 runInstaller 克隆 HOME

26ai 提供了 -setupDBHomeAs 参数,可以把新 HOME 配置成和旧 HOME 完全一致的环境:

1
2
# 以 oracle 用户执行
$ORACLE_HOME/runInstaller -silent -ignorePrereqFailure -setupDBHomeAs -sourceOracleHome /u01/app/oracle/product/23.0.0/dbhome_1 -targetOracleHome /u01/app/oracle/product/23.0.0/dbhome_2 -waitforcompletion

这个命令会把旧 HOME 的配置(包括 oratab、inventory、环境变量关联等)复制到新 HOME,确保两个 HOME 的配置一致性。

Step 4:切换数据库到新 HOME

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 停止数据库(短暂停机窗口)
sqlplus / as sysdba
SQL> shutdown immediate

# 修改 oratab 指向新 HOME
# 编辑 /etc/oratab,把 mydb 的行改为:
# mydb:/u01/app/oracle/product/23.0.0/dbhome_2:Y

# 重新加载环境变量
export ORACLE_HOME=/u01/app/oracle/product/23.0.0/dbhome_2
export PATH=$ORACLE_HOME/bin:$PATH

# 启动数据库
sqlplus / as sysdba
SQL> startup

# 运行 datapatch(Gold Image 通常已经包含最新 SQL,但建议运行确认)
cd $ORACLE_HOME/OPatch
./datapatch -verbose

Step 5:验证并清理旧 HOME

确认一切正常后,旧 HOME 可以保留一段时间作为回滚备份,后续再删除。

3.4 DBCA 自动化 Gold Image 补丁(以单实例举例)

对于单实例,Oracle 26ai 推荐用 DBCA 来完成 Gold Image 补丁,比手动更省心:

1
2
# DBCA 可以直接调用 Gold Image 进行 out-of-place 补丁
dbca -silent -applyRU -ruLocation /tmp/p39093711_230000_Linux-x86-64_GoldImage.zip -oracleHome /u01/app/oracle/product/23.0.0/dbhome_2 -sourceOracleHome /u01/app/oracle/product/23.0.0/dbhome_1 -sid mydb

DBCA 会自动完成:解压 Gold Image → 克隆配置 → 停止数据库 → 切换 HOME → 启动数据库 → 运行 datapatch。全程自动化,出错概率低。

04. 23.26.2 值得关注的几个新特性

这次季度补丁不只是修 bug,还带来了几个实用增强。笔者在测试环境上体验了一下,印象最深的是这几个:

4.1 Local HNSW 向量索引

26ai 引入了 本地 HNSW 索引,支持在分区表的每个分区上创建独立的 HNSW 向量索引。这意味着:

  • 查询带分区键时,Oracle 会自动做分区裁剪,只扫描相关分区的 HNSW 索引
  • 支持并行查询,跨分区扫描可以并行执行
  • RAC 环境下支持集中式或分布式构建模式

但也有限制:DML 操作后索引不会自动更新,需要先删除索引、插数据、再重建索引。所以这种索引更适合相对静态的向量数据集。

4.2 Vector Memory Pool 独立配置

26ai 新增了 vector_memory_size 参数,可以在 SGA 中单独划出一块内存给向量计算使用。默认是 0,意味着 HNSW 索引无法创建。

1
2
3
4
5
6
7
8
-- 查看当前配置
SQL> SHOW PARAMETER vector_memory_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
vector_memory_size big integer 0

-- 设置为 512M(静态参数,需重启生效)
SQL> ALTER SYSTEM SET vector_memory_size = 512M SCOPE=SPFILE;

重启后 HNSW 索引就能正常创建了。这个设计让向量负载和传统 OLTP 负载的内存资源可以分开管理,避免互相争抢。

4.3 JRE 漏洞热补丁(无需停机)

Oracle 26ai 支持在不停数据库、不停 Grid Infrastructure 的情况下,直接给 JRE 打安全补丁。这对于安全合规要求高的企业是个福音,紧急漏洞不需要再申请半夜停机窗口了。

06. 总结

走完 23.26.1 → 23.26.2 的升级流程,再研究完 Gold Image 的资料,这里分享两点感受:

  1. OPatch 还能用,但已经不是未来。Oracle 明确 deprecated 了 OPatch 的 out-of-place 方式,in-place 虽然可用,但风险高、停机长。建议 DBA 团队现在开始熟悉 Gold Image 流程。Gold Image 的本质是"软件交付方式的变革"。以前补丁是差分包,现在补丁是完整镜像。这类似于容器镜像的思路,标准化、可回滚、低漂移。

  2. 向量相关的参数和索引需要特别关注。vector_memory_size、Local HNSW、分区裁剪,这些新玩意儿对 AI 场景下的数据库运维提出了新要求。这个我们后面再开新章节介绍。


Have a nice day ~ ☕

🌻 近期内容 ▼

👉 这里有得聊

如果对国产基础软件(操作系统、数据库、中间件)、AI、Vibe Coding、OpenClaw 、Hermes Agent 等感兴趣,可以加群一起聊聊。关注微信公众号:(少安事务所),后台回复[群],即可看到入口。如果这篇文章为你带来了灵感或启发,请帮忙『点赞、推荐、转发』吧,感谢!ღ( ´・ᴗ・` )~