当前位置:首页 > 问答 > 正文

Oracle里怎么快速查CPU和PSU补丁到底打了没,步骤啥的讲讲吧

要查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 包含的信息大同小异,都是可靠的来源。

    Oracle里怎么快速查CPU和PSU补丁到底打了没,步骤啥的讲讲吧

步骤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里怎么快速查CPU和PSU补丁到底打了没,步骤啥的讲讲吧

如何确认你查到的补丁就是最新的?

光知道系统里打了什么补丁还不够,你得知道它是不是最新的,这就需要你去Oracle官方渠道核对。

  1. 访问My Oracle Support(MOS):这是Oracle的官方支持网站,你需要一个付费账户才能登录。
  2. 查找补丁信息:在MOS站内,你可以通过补丁号直接搜索,或者使用著名的 “Oracle Critical Patch Update Advisor” 工具(参考来源2),这个工具可以根据你输入的数据库版本和平台,直接告诉你最新的CPU/PSU补丁号是多少,以及你的版本是否已经过时。
  3. 对比补丁号:将你在自己数据库里查到的最后一个PSU补丁号,与MOS上公布的最新补丁号进行对比,如果你的补丁号比MOS上的小,或者根本没有打PSU补丁,那就意味着你需要计划打补丁了。

一个重要的提醒:关于Bundle Patch

对于某些版本的数据库(比如12.1.0.2之后的一些版本),Oracle引入了Bundle Patch(捆绑补丁)的概念,它取代了PSU,查询方法完全一样,只是补丁的类型名称变了,你在 DBA_REGISTRY_HISTORYCOMMENTS 字段里可能会看到 “DATABASE BUNDLE PATCH” 的字样,判断逻辑不变:查看最新补丁号并与MOS上的最新信息对比。

总结一下最直接的步骤:

  1. sqlplus / as sysdba 登录数据库。
  2. 执行 SELECT ... FROM DBA_REGISTRY_HISTORY ORDER BY ACTION_TIME DESC; 查看补丁历史。
  3. 找到最近应用的、ID是数字的补丁记录,记下补丁号。
  4. 登录My Oracle Support,使用 “Critical Patch Update Advisor” 或直接搜索,找到对应你数据库版本和平台的最新推荐补丁号。
  5. 对比两个补丁号,判断是否需要更新。

遵循以上步骤,你就能快速、准确地确认Oracle数据库的CPU/PSU补丁状态了。