当前位置:首页 > 技术 > 正文内容

Oracle OPatch 工具使用指南

访客 技术 2026年7月16日 1

OPatch 是 Oracle 提供的命令行工具,用于管理和应用补丁到 Oracle 数据库、中间件等 Oracle 产品。它是 Oracle 补丁管理流程的核心工具,帮助维护系统稳定性、安全性和功能更新。

Oracle 数据库初始安装后,在 $ORACLE_HOME 目录下会包含一个 OPatch 文件夹,这就是 OPatch 管理工具。

OPatch 主要功能:

  • 安装补丁
  • 回滚补丁
  • 冲突检测
  • 显示已安装的组件和补丁信息

通常我们会将 OPatch 目录添加到 PATH 环境变量中,这样就不需要每次进入 $ORACLE_HOME/OPatch 目录来执行命令:

# Windows
set PATH=%ORACLE_HOME%/OPatch:%PATH%
# Unix
export PATH=$ORACLE_HOME/OPatch:$PATH

配置完成后,直接运行命令即可:

[oraprod@rac01:~]$ opatch version
OPatch Version: 12.2.0.1.3

OPatch succeeded.

更新 OPatch 工具

当我们要安装某些补丁时,常会发现默认的 OPatch 版本并不能满足补丁 README 中对 OPatch 版本的要求:

If you do not have OPatch 12c Release 12.2.0.1.43 or the latest version available for 12c Release 12.2.0.1.0,then download it from patch# 6880880 for 12.2.0.1.0 release.

这时就需要更新 OPatch 工具。

下载 OPatch

从 Oracle 支持网站(MOS)下载 OPatch:https://updates.oracle.com/download/6880880.html

根据数据库版本和操作系统平台选择合适的 OPatch 安装包,下载后的文件名通常为:p6880880_<version>_<platform>.zip,这个文件实际上就是 OPatch 工具!

备份 OPatch

在更新 OPatch 之前,建议先备份 $ORACLE_HOME 目录下旧版本的 OPatch:

[oraprod@rac01:~]$ cd $ORACLE_HOME
[oraprod@rac01:~]$ mv OPatch OPatch.bkp

更新 OPatch

每个补丁的 README 文件中都有具体的安装说明。我们将下载的 p6880880 安装包解压到 $ORACLE_HOME 目录下:

unzip /soft/p6880880_<version>_<platform>.zip
opatch version

如何知道需要安装哪个版本的 OPatch?

根据你当前的数据库版本安装最新的 OPatch 就行!例如,如果你现在使用的是 19C 版本,且需要安装 19.25 的 RU 补丁,README 中提示需要更新 OPatch,那就直接下载最新版本的 OPatch 进行更新。

OPatch 发布的周期和 PSU/RU 补丁发布的周期基本一致。

OPatch 常用命令

我们可以通过 opatch -help 命令查看 OPatch 命令的所有可用选项:

[oraprod@rac01:~]$ opatch -help
Oracle Interim Patch Installer version 12.2.0.1.45
Copyright (c) 2025, Oracle Corporation.  All rights reserved.


Usage: opatch [ -help ] [ -report ] [ command ]

           command := apply
                      compare
                      lsinventory
                      lspatches
                      napply
                      nrollback
                      rollback
                      query
                      version 
                      prereq
                      util

<global_arguments> := -help       Displays the help message for the command.
                      -report     Print the actions without executing.

example:
  'opatch -help'
  'opatch -help -fmw'
  'opatch apply -help'
  'opatch compare -help'
  'opatch lsinventory -help'
  'opatch lspatches -help'
  'opatch napply -help'
  'opatch nrollback -help'
  'opatch rollback -help'
  'opatch prereq -help'
  'opatch util -help'


OPatch succeeded.

以下是一些日常使用中比较常用的命令:

# 查看 opatch 版本
opatch version

# 查看已安装补丁
opatch lspatches

# 查看已安装补丁明细
opatch lsinventory
opatch lsinventory -all

# 当前的补丁历史会自动包含在 Oracle Central Inventory 中,可以通过命令 "opatch lsinventory -detail" 来查看
opatch lsinventory -detail -oh $ORACLE_HOME

# 安装补丁前检查
opatch prereq CheckConflictAgainstOHWithDetail -ph ./
opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir <补丁解压目录>

# 安装补丁
opatch apply
# 静默安装补丁,使用 OPatch 参数 -silent 以非交互模式运行,不需要输入 Y/N
opatch apply -silent

# 回退补丁
opatch rollback -id <补丁编号>

OPatch 常见问题

  1. 运行 OPatch 工具的前提条件是什么?
  • OPatch 在安装补丁过程中会执行 relink 操作,因此必须确保链接命令,如 ld、make、ar 等能够正常工作。
  • 检查 JDK/JRE 是否在 ORACLE_HOME 中正确安装,OPatch 使用 JDK 中的 jar 工具来执行其 jar、war 和 ear 操作。OPatch 将在指定的 Oracle Home 中查找 JDK。如果默认的 Oracle Home 中的 JDK 损坏,用户必须使用 OPatch 中的 -jre 选项提供备用位置。
  • 检查 /tmp 目录和 $ORACLE_HOME 是否有足够的可用空间。当 OPatch 处理补丁安装脚本时,它会同时生成回滚脚本,并保存每个在补丁过程中编辑或删除的文件副本。OPatch 还会备份 inventory 信息。因此,Oracle 建议有足够的系统空间来容纳补丁和备份信息。
  • 检查 Oracle Universal Installer 和 OPatch 版本的兼容性。例如:OPatch 10.2 需要 Oracle Universal Installer 10.2 或更高版本才能正常工作。如果 Oracle Universal Installer 版本低于 OPatch 所需版本,则 OPatch 会报错。
  1. 如何确认补丁是否已正确安装?
  • 每个补丁附带的 README 文件包含了具体补丁的安装说明。通常,这些说明要求以 Oracle 账户身份,从解压缩后的补丁子目录中运行 "opatch apply" 命令。opatch 工具将补丁安装到指定并设置为 $ORACLE_HOME 的 Oracle Home。
  • 要验证补丁是否已成功安装,可以使用命令 opatch inventory 检查,确认补丁是否已成功注册。如果补丁已在 inventory 中注册,命令结果将列出补丁号码。检查 OPatch 日志文件,查看是否有错误。如果没有发现问题,则说明补丁已成功安装。
  1. 如何在不关闭数据库实例的情况下在线安装补丁?什么是在线补丁?
  • 常规的 RDBMS 补丁由一个或多个对象文件(.o 文件)、库文件(.a 文件)组成。安装常规补丁需要关闭 RDBMS 实例、重新链接 Oracle 二进制文件并重新启动实例;卸载常规补丁也需要执行相同的步骤。
  • 在线补丁是一种特殊类型的补丁,可以安装在正在运行的 RDBMS 实例。在线补丁包含一个单独的共享库;安装在线补丁不需要关闭实例或重新链接 Oracle 二进制文件。可以使用 OPatch 安装/卸载在线补丁(OPatch 使用 oradebug 命令来安装/卸载补丁)。目前,在线补丁仅支持 RDBMS,即 Oracle 二进制文件。
  1. 如何在静默模式下运行 OPatch?

我们可以使用 OPatch 参数 -silent 以非交互模式运行 opatch apply、napply、rollback 和 nrollback 命令。

opatch <option> -silent 执行以下操作:

  • 不会有任何用户交互,即不会显示任何 OPatch 提示以要求用户输入的内容。
  • 自动通过采用默认选项作为输入回答所有 OPatch 提示并继续执行。
  1. $ORACLE_HOME/.patch_storage 目录的作用是什么?如果不小心被删除了怎么办?
  • 当向 Oracle Home 安装临时补丁时,OPatch 会将补丁信息存储在 $ORACLE_HOME/.patch_storage 目录中。
  • 在此目录内,会为每个安装到 Oracle Home 的补丁创建单独的子目录。在安装过程中,可能会遇到补丁冲突,并希望移除冲突的补丁,这个过程被称为补丁回滚。
  • 在安装补丁期间,OPatch 会在加载新版本之前,将所有被新补丁替换的文件的副本保存下来,并存储在 $ORACLE_HOME/.patch_storage/patch ID/ 目录中。这些保存的文件称为回滚文件,它们是实现补丁回滚的关键。
  • 每次安装补丁时,都会对 inventory 进行更改。有时,这些更改可能会导致 inventory 损坏。
  • 从 Oracle RDBMS 10.2.0.X.X 开始,当安装补丁时,OPatch 会创建 inventory 的快照,并将其存储在 $ORACLE_HOME/.patch_storage/ 中。
  • $ORACLE_HOME/.patch_storage/<patch-id_timestamp>/restore.sh 脚本随 OPatch 一起提供,用于移除安装补丁后对 inventory 所做的任何更改。

因此,如果 $ORACLE_HOME/.patch_storage 被不小心删除,您需要从备份中恢复它,或者重新安装 Oracle Home。

  1. 如果 OPatch 在安装补丁过程中中断了,接下来会怎么处理?
  • OPatch 的编写方式使得命令具有幂等性,运行一次与运行多次效果相同。所以,当补丁安装发生中断时,可以重新执行。
  • 目前无法删除部分安装的临时补丁,补丁过程必须完成。补丁过程完成后,可以使用回滚删除补丁。
  • 如果由于某个问题(例如找不到库文件且未应用到其中一个目标文件)而中止此过程,则可以在库文件可用后重新启动补丁安装程序,但只会安装最后剩余的目标文件。
  • 其他导致补丁安装中止的异常情况包括由于补丁损坏导致的 make 失败,或在使用 ld 创建新可执行文件时设备空间不足等问题。

所有这些情况都可以重新执行。

  1. 运行 OPatch 时遇到错误,提示 fuser 不可用,应该怎么办?
  • 运行 OPatch 时,它会检查是否有 Oracle 进程正在运行。如果有,它会在补丁安装开始之前警告用户。这个检查是通过 fuser 命令完成的,在大多数操作系统中,fuser 命令位于 /sbin/usr/sbin 目录下,通常这些目录没有包含在用户的 PATH 变量中。

解决方法是将 /sbin:/usr/sbin 添加到 PATH 变量中。

  1. 当在RAC(Real Application Clusters)中安装补丁时,是否可以以Rolling方式安装?如果可以,应该如安装?

对于 RAC(Real Application Clusters),补丁安装有两种方式:

  • 第一种方式是,如果补丁被标记为可滚动(Rolling)升级,即在 <patch>/etc/config/inventory 的 <online_rac_installable>false 中标记为 true。
  • 此类补丁可以以级联方式安装于各节点,允许不同实例运行不同版本的代码(补丁会引入代码差异)。这种情况适用于不会影响 SGA 结构和堆的特定补丁。
  • 这种方式的一个优势是可以先在某个节点上测试补丁,在确认没有引发应用程序意外行为后再推广到其他节点。
  • 如果补丁在测试节点上导致了问题,还可以从该节点回滚。目前只有一部分补丁会被标记为可滚动升级。
  • 第二种方式是使用 minimize_downtime 选项来安装补丁。
标签: OracleOPatch

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。