Oracle里怎么快速查CPU和PSU补丁到底打了没,步骤啥的讲讲吧
- 问答
- 2026-01-21 19:52:54
- 4
要查Oracle数据库的CPU(Critical Patch Update,关键补丁更新)或PSU(Patch Set Update,补丁集更新)到底打了没有,最直接、最可靠的方法就是进入数据库内部去查询它的补丁元数据,Oracle在每次成功安装补丁后,都会在数据库的注册表中留下记录,下面我分几种情况,详细讲讲怎么查。
*核心查询方法:使用SQLPlus连接数据库查询**
这是最基本也是最准确的方法,你需要用有权限的用户(比如SYS用户)登录到SQL*Plus命令行工具。
步骤1:连接数据库
打开终端或命令提示符,输入:
sqlplus / as sysdba
这会让你以操作系统认证的方式以SYS管理员身份登录,如果不行,你可能需要输入完整的连接字符串,sqlplus sys/password@servicename as sysdba。
步骤2:执行查询补丁信息的SQL语句
登录成功后,你会看到 SQL> 提示符,然后就可以输入查询语句了,这里有几种常用的查询方式,你可以根据你知道的信息来选择。
-
你知道具体的补丁号(比如PSU补丁号是33561321) 如果你已经从Oracle支持网站(My Oracle Support)上知道了应该打哪个补丁号,可以直接精确查询,根据Oracle官方文档《Database Patch Set Update (PSU) Installation Guide》(参考来源1)中提供的标准方法,可以查询
DBA_REGISTRY_HISTORY视图。 输入命令:SELECT ACTION_TIME, ACTION, NAMESPACE, VERSION, ID, COMMENTS FROM DBA_REGISTRY_HISTORY WHERE ID = '33561321';如果这个查询返回了一行记录,特别是ACTION列显示为APPLY,并且有具体的时间,那就说明这个补丁已经成功应用了,如果什么都没返回,那就说明没打这个补丁。 -
你不知道具体补丁号,想看看系统里都打了哪些补丁 这时你可以查看完整的补丁历史记录,还是查询
DBA_REGISTRY_HISTORY视图,但不加条件。 输入命令:SELECT ACTION_TIME, ACTION, NAMESPACE, VERSION, ID, COMMENTS FROM DBA_REGISTRY_HISTORY ORDER BY ACTION_TIME DESC;这会列出所有操作历史,包括补丁应用(APPLY)、升级(UPGRADE)等,你可以滚动查看,找那些ID列是数字的条目,这些通常就是CPU或PSU补丁号。COMMENTS列通常会写明补丁的描述,“Database PSU 12.1.0.2.201020, ...”。 -
使用Oracle推荐的另一个视图
REGISTRY$HISTORY在一些版本的官方文档(例如针对11g的PSU指南,参考来源1)中,也提到了查询REGISTRY$HISTORY视图,查询方法类似:SELECT ACTION_TIME, ACTION, NAMESPACE, VERSION, ID, COMMENTS FROM REGISTRY$HISTORY WHERE ID = '33561321';或者查看全部:SELECT ACTION_TIME, ACTION, NAMESPACE, VERSION, ID, COMMENTS FROM REGISTRY$HISTORY ORDER BY ACTION_TIME DESC;这个视图和DBA_REGISTRY_HISTORY包含的信息大同小异,都是可靠的来源。
步骤3:解读查询结果 关键看几列:
ACTION_TIME:补丁应用的时间。ACTION:操作类型,APPLY表示应用补丁。ID:最重要的信息,就是补丁号,比如一个PSU补丁号可能是像 “33561321” 这样的纯数字。COMMENTS:注释,里面通常会包含更友好的描述,比如会直接写出 “OJVM PSU” 或 “Database PSU” 以及版本号。
通过OPatch工具查询(操作系统层面)
除了在数据库里查,你还可以在数据库软件安装所在的操作系统上,使用Oracle提供的OPatch工具来检查,OPatch是专门用来管理补丁的命令行工具。
步骤1:设置环境变量
你需要先设置好Oracle的环境变量,让系统知道OPatch在哪里,通常需要运行以下脚本(路径可能因安装而异):
对于Linux/Unix:
source /u01/app/oracle/product/19.0.0/dbhome_1/bin/oraenv
然后输入你的ORACLE_SID。
步骤2:执行OPatch命令
切换到OPatch目录,通常位于 $ORACLE_HOME/OPatch,然后执行:
./opatch lsinventory
这个命令会列出Oracle主目录(ORACLE_HOME)下安装的所有补丁的详细信息,它会输出一大段文本,你需要在其中查找 “Interim patches” 部分,这里会列出所有已安装的临时补丁(包括PSU),并显示补丁号、描述和应用日期。

如何确认你查到的补丁就是最新的?
光知道系统里打了什么补丁还不够,你得知道它是不是最新的,这就需要你去Oracle官方渠道核对。
- 访问My Oracle Support(MOS):这是Oracle的官方支持网站,你需要一个付费账户才能登录。
- 查找补丁信息:在MOS站内,你可以通过补丁号直接搜索,或者使用著名的 “Oracle Critical Patch Update Advisor” 工具(参考来源2),这个工具可以根据你输入的数据库版本和平台,直接告诉你最新的CPU/PSU补丁号是多少,以及你的版本是否已经过时。
- 对比补丁号:将你在自己数据库里查到的最后一个PSU补丁号,与MOS上公布的最新补丁号进行对比,如果你的补丁号比MOS上的小,或者根本没有打PSU补丁,那就意味着你需要计划打补丁了。
一个重要的提醒:关于Bundle Patch
对于某些版本的数据库(比如12.1.0.2之后的一些版本),Oracle引入了Bundle Patch(捆绑补丁)的概念,它取代了PSU,查询方法完全一样,只是补丁的类型名称变了,你在 DBA_REGISTRY_HISTORY 的 COMMENTS 字段里可能会看到 “DATABASE BUNDLE PATCH” 的字样,判断逻辑不变:查看最新补丁号并与MOS上的最新信息对比。
总结一下最直接的步骤:
- 用
sqlplus / as sysdba登录数据库。 - 执行
SELECT ... FROM DBA_REGISTRY_HISTORY ORDER BY ACTION_TIME DESC;查看补丁历史。 - 找到最近应用的、ID是数字的补丁记录,记下补丁号。
- 登录My Oracle Support,使用 “Critical Patch Update Advisor” 或直接搜索,找到对应你数据库版本和平台的最新推荐补丁号。
- 对比两个补丁号,判断是否需要更新。
遵循以上步骤,你就能快速、准确地确认Oracle数据库的CPU/PSU补丁状态了。
本文由太叔访天于2026-01-21发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/84160.html
