十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Oracle 19c OPatch升级全攻略:p6880880补丁包安装与验证

Oracle 19c OPatch升级全攻略:p6880880补丁包安装与验证 简介这是Oracle 19c数据库的官方补丁包p6880880面向Linux x86-64环境下的数据库管理员与运维工程师主要用于修复已知问题、提升运行性能与安全性。补丁基于OPatch工具集内含大量jar与so运行库、properties配置、pl/sql脚本、sh运维脚本并附带png、md等说明文档整体共496个文件压缩包约115.39MB目录结构清晰便于在已有19c实例上完成补丁安装与验证。目前已有1984人学习使用。通过该补丁包可获取完整的OPatch组件、Java运行环境、补丁检测脚本及配套的授权与配置文件管理员可据此实现补丁的自动化安装、回滚和清单比对确保数据库长期稳定运行。 搞 Oracle 维护的人对p6880880这串编号应该很熟悉。我每次准备给 19c 数据库打季度更新RU补丁之前总会先去检查一下当前 OPatch 的版本。为什么因为打补丁的工具版本不对后续再怎么操作都会卡在第一步。p6880880_190000_Linux-x86-64.zip这个文件就是 OPatch 工具的更新包专门用于把数据库软件的补丁管理工具升级到支持 19c 的版本。这篇文章会把这个补丁包的完整实施过程拆开来讲包括文件结构、环境检查、替换步骤、验证方法和几个我实际踩过的坑适合负责 Oracle 数据库运维的同行参考也适合刚接手 19c 环境的新人照着操作。1. p6880880 是什么一次看懂 OPatch 补丁包结构1.1 补丁文件名拆解很多人第一次看到这串文件名会懵p6880880_190000_Linux-x86-64.zip到底代表什么其实 Oracle 的补丁命名有一套固定逻辑拆开看就清楚了组成含义p6880880OPatch 工具在 Oracle 内部对应的补丁编号190000目标版本对应 19.0.0.0.0也就是数据库 19cLinux-x86-64平台信息表示 Linux 64 位系统.zip压缩格式解压后直接是 OPatch 目录这里最关键的一点它不是数据库本身的补丁而是补丁管理工具的更新包。OPatch 是 Oracle 自带的 Java 工具负责把 RU、RUR 这些补丁正确安装到数据库软件目录里。如果 OPatch 本身版本太旧可能不认识新补丁的格式或者缺少必要的模块导致打补丁失败。我见过不少同事把 p6880880 和数据库补丁混为一谈以为下载了这个就不用下载 RU 了。实际完全不是一回事。可以这样理解OPatch 是打补丁的螺丝刀数据库补丁才是螺丝。螺丝刀要匹配螺丝的型号OPatch 版本太低就拧不动新补丁。1.2 为什么要把 OPatch 单独升级到 19c 版本既然 OPatch 是个工具为什么要单独跟着 19c 走因为数据库软件的补丁机制是跟主版本绑定的。19c 引入了很多新的补丁特性比如补丁的格式、依赖关系校验、前置条件检查等都比 12c 时代复杂。旧版 OPatch 去解析 19c 的 RU 补丁时经常出现OPatch version is lower than required这种报错直接中断安装。实际上当你在官方补丁页面下载某个 RU 补丁时README 里通常都会写明最低 OPatch 版本要求。比如某个 19c 季度补丁要求 OPatch 版本不低于12.2.0.1.36而你手上还是.20的话就需要先把 p6880880 更新到新版。这个更新动作虽然不直接修改数据库却是整个补丁工作的前置条件提前做好能省去不少麻烦。2. 升级 OPatch 前必须完成的 3 项环境检查2.1 确认当前 OPatch 版本动手之前先确认当前环境的 OPatch 版本到底是多少。用 oracle 用户登录服务器执行su - oracle $ORACLE_HOME/OPatch/opatch version输出类似OPatch Version: 12.2.0.1.29如果$ORACLE_HOME/OPatch目录不存在说明你的环境可能不是标准安装或者ORACLE_HOME环境变量没生效。这时候可以手动指定路径/u01/app/oracle/product/19.0.0/dbhome_1/OPatch/opatch version还需要注意一个细节如果服务器上同时装了Grid InfrastructureGI和数据库DB那么它们各自有独立的$GI_HOME和$ORACLE_HOME都要分别检查。因为 GI 和 DB 的 OPatch 是分开的不能混用。2.2 核实 ORACLE_HOME 与 Oracle 用户环境很多人在执行opatch时报Unable to determine Oracle Home或No Oracle Home set根本原因是环境变量不对。在执行任何操作前确认下面几项当前用户是 oracle或软件属主可以用id查看用户和组ORACLE_HOME指向正确的数据库软件目录echo $ORACLE_HOME确认ORACLE_BASE如果设置了也应该合理从 root 切换到 oracle 时如果只执行su而不是su - oracle环境变量可能没加载完整。我习惯在操作前把这几行全部跑一遍准确无误再继续id echo $ORACLE_HOME echo $ORACLE_BASE ls -d $ORACLE_HOME/OPatch这样可以尽早发现问题避免做到一半才发现环境不对。2.3 备份原有 OPatch升级 OPatch 本质上是用新版目录替换旧版目录所以备份是必须的。我先在$ORACLE_HOME下把原目录整个复制一份而不是移动这样万一新版本的某个兼容性问题暴露出来可以随时回滚cd $ORACLE_HOME cp -Rp OPatch OPatch_bak_$(date %Y%m%d)-p保留属主和时间戳-R递归复制。复制完成后用du -sh确认备份目录大小和原目录一致避免中间被中断。另外在多个节点组成的 RAC 环境中所有节点的$ORACLE_HOME/OPatch都要备份不只是主节点因为后续打补丁时每个节点都会用到。3. p6880880 补丁安装全流程实录3.1 上传并解压补丁包准备好安装包后把它上传到服务器某个临时目录我习惯放在/tmp/opatch_updatemkdir -p /tmp/opatch_update cd /tmp/opatch_update unzip p6880880_190000_Linux-x86-64.zip这里有一个很容易被忽视的坑解压后不会生成一个叫 p6880880 的外层目录而是直接在当前目录下出现OPatch文件夹。第一次操作的人容易搞混以为结构是/tmp/opatch_update/p6880880/OPatch。实际上解压结果就是/tmp/opatch_update/OPatch后面替换时一定要指向这个目录。解压之前我建议先跑一次完整性检查尤其是从网络下载的安装包unzip -t p6880880_190000_Linux-x86-64.zip如果出现invalid zip archive或者End-of-central-directory signature not found之类的提示通常说明文件没下载完整或者传输损坏直接重新下载就行别花时间折腾其他原因。3.2 替换 OPatch 目录并修复权限解压完成后开始替换。我的做法是先把原目录改名再把新版放进去mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch_bak_$(date %Y%m%d) cp -R /tmp/opatch_update/OPatch $ORACLE_HOME/ chown -R oracle:oinstall $ORACLE_HOME/OPatch关于权限这里解释一下为什么要额外执行chown。zip 包虽然通常保留了 Unix 权限位但如果你是在 Windows 上解压过再传到 Linux 服务器或者中间经过某些文件传输工具属主和组很可能会变成 root。如果不修正后续 oracle 用户执行opatch时会报各种权限错误。如果环境是 RAC 多节点需要在每个节点上重复上面的替换步骤。有些版本还需注意如果你同时维护了 GI也要用同样的逻辑替换$GRID_HOME/OPatch否则后面打 GI 的补丁时依然会卡在版本检查上。3.3 升级完成的验证步骤替换完成后先验证版本$ORACLE_HOME/OPatch/opatch version如果显示的版本已经变成 p6880880 包里的新版本号说明核心替换成功。接下来我还会跑一次opatch lsinventory确认 OPatch 能够正常读取当前环境的补丁清单$ORACLE_HOME/OPatch/opatch lsinventory注意lsinventory在数据库实例运行状态下也可以执行因为 OPatch 只是读取$ORACLE_HOME里的补丁信息不需要连接数据库。不过为了保险我通常在打 RU 补丁前一起做正好通过这一步确认目录结构没有异常。如果lsinventory能正常列出已安装的补丁说明新版 OPatch 已经可以正常读取环境信息。这时候不建议立即删掉备份目录我会等 RU 补丁也顺利打完之后再清理多留一份总是没坏处的。4. 安装中的常见报错与排查心得4.1 解压报invalid zip archive怎么办前面提到unzip时如果出现could not find EOCD或invalid zip archive大方向只有两个文件下载不完整或者文件本身已经损坏。我遇到过一种情况是用浏览器直接下载时被拦截了一半文件大小只有原文件的一小半。所以我的经验是先看文件尺寸和校验值Oracle 官方下载页面通常提供 MD5 或 SHA256 校验值核对一下最省事。如果确认文件没问题但依然报错可以换下载工具重新下载或者用zip -F尝试修复不过我建议直接重下修复这种补丁文件的成功率和性价比都不高。4.2 OPatch 版本太低或环境变量报错打 RU 补丁时如果 OPatch 版本不够报错通常是这种风格OPatch version 12.2.0.1.20 is lower than required 12.2.0.1.36这其实是好消息因为问题很明确只差一个 OPatch 更新。但有时报错藏在prereq检查的日志里不仔细看还看不出来。所以在打 RU 前先看 README找到其中的 OPatch 版本要求提前比较比我到最后一刻再处理要高效很多。另外如果报错是Exception in thread main java.lang.NullPointerException这种 Java 栈信息通常不是版本问题而是环境变量不对。OPatch 是 Java 写的它依赖ORACLE_HOME和系统 Java 环境如果ORACLE_HOME没设置或者指向了错误目录Java 启动时就找不到需要的类库。这时候先静下心把环境变量重新确认一遍。4.3 权限与属主问题替换目录后如果遇到Permission denied大概率是属主问题而不是文件本身的问题。我在生产环境吃过一次亏从管理机上传 zip 到数据库服务器后直接解压结果OPatch目录属主变成了 rootoracle 用户执行时一直报权限错误。排查过程并不难ls -l看一下目录属主就能发现难的是建立这个意识。所以我现在形成了习惯只要解压后属主不是 oracle:oinstall就先统一修正再继续。另外OPatch目录下如果有 jar 文件或可执行脚本丢了执行权限也可能导致运行失败可以用find $ORACLE_HOME/OPatch -name *.sh -exec chmod x {} \;批量恢复脚本权限不过正常从官方 zip 解压出来的话不会遇到这个问题。4.4 RAC 与多节点环境的额外提醒单机环境升级 OPatch 很简单但 RAC 环境容易出现只在一台节点升级的问题。OPatch 这个工具是本地目录实体不会自动同步到其他节点。如果你只在节点 1 换了新版后面在节点 2 打补丁时还是会报版本不满足。还有一个容易忽略的点版本升级不要跨版本回退。比如你的 OPatch 已经升到 12.2.0.1.40想临时换回.29来配合某些老补丁这要非常谨慎。旧版不支持新补丁的元数据格式可能会把补丁清单搞得不可读。我的原则是除非官方 README 明确要求否则只升不降。最后再分享两个小技巧第一升级完 OPatch 后建议在日志里记录一下升级时间和版本号方便后面排查问题第二临时目录里的 zip 包和解压文件在升级完成后及时清理既节省空间也避免将来把旧版本误当成新版本复制到别的环境。OPatch 更新这件事本身不复杂但它是整个补丁链路里的第一块多米诺骨牌把这步做稳了后面的 RU 补丁安装会顺畅很多。本文还有配套的精品资源点击获取
返回列表