资讯详情

资讯详情

Oracle 11g补丁p20760997应用前必做的5项校验

简介本资源是Oracle数据库11.2.0.3版本专用的安全与稳定性补丁包面向DBA、运维工程师及企业级数据库维护人员用于解决已知安全漏洞、性能缺陷与系统稳定性问题尤其适用于需通过合规审计或强化生产环境防护的场景。压缩包为ZIP格式大小100.73MB内含关键补丁程序如编号20760997的可执行/脚本文件及PatchSearch.xml等元数据配置文件前者用于实际打补丁操作后者提供补丁适用性校验与安装指引。资源已获293人学习下载体现了其在Oracle 11g R2长期维护阶段的实际应用价值。读者可直接获取完整、官方认证的DATABASE PATCH SET UPDATE 11.2.0.3.15含CPUJUL2015无需自行拼凑多个独立补丁显著降低升级风险同时配套XML文件有助于自动化适配检查与部署流程提升补丁管理效率与可靠性。1. Oracle 补丁 p20760997_112030_Linux-x86-64.zip别急着 unzip先看清楚这是给谁打的补丁你刚从 My Oracle SupportMOS下载完p20760997_112030_Linux-x86-64.zip双击解压、cd 进去、./opatch apply 一气呵成——结果报错OPatch failed with error code 73或者更糟数据库实例启动失败、监听器拒绝连接、甚至sqlplus / as sysdba直接卡死在ORA-01034: ORACLE not available。这不是玄学是真实踩坑现场。这个补丁编号p20760997对应的是 Oracle Database 11g Release 211.2.0.3.0的 Critical Patch UpdateCPU中的一个关键安全修复而_112030明确指向目标版本——它只兼容 11.2.0.3.0 基础安装不向下兼容 11.2.0.1/2也不向上支持 11.2.0.4。很多团队在升级前没做版本快照、没验证 OPatch 版本、没停监听就硬上结果补丁回滚都救不回来。本文不是讲“怎么下载”而是带你从零确认你的环境是否真的配得上这个 zip 包它该打在数据库 home 还是 grid homeOPatch 是该升级还是降级补丁冲突怎么提前发现适合正在维护老旧 Oracle 11g 生产库、又不敢轻易升级大版本的 DBA 和运维同学——装对了是加固装错了是自毁。2. 环境校验与前置准备三步确认你的系统能接住这个补丁2.1 确认 Oracle Home 版本与补丁兼容性别让 11.2.0.4 拿着 11.2.0.3 的补丁硬上补丁包名p20760997_112030_Linux-x86-64.zip中的_112030是核心线索它代表该补丁专为Oracle Database 11.2.0.3.0构建。必须严格匹配否则 OPatch 会直接拒绝应用。执行以下命令确认当前数据库 home 的真实版本# 切换到你的 Oracle 数据库软件目录非数据库实例目录 cd $ORACLE_HOME ./opatch version # 输出示例OPatch Version: 11.2.0.3.0 → 合规 # 若输出 OPatch Version: 11.2.0.1.0 或 11.2.0.4.0则需先升级/降级 OPatch再验证数据库软件版本本身# 在 $ORACLE_HOME 下执行 $ORACLE_HOME/OPatch/opatch lsinventory -detail | grep Oracle Database 11g # 正确输出应含Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production # 若显示 11.2.0.1.0 或 11.2.0.4.0则此补丁不可用 —— 强行运行会触发 OPatch error code 22version mismatch提示lsinventory输出中Patch Level字段必须是11.2.0.3.0不能只看$ORACLE_HOME/inventory/ContentsXML/comps.xml里写的11.2.0.3.0那是安装时记录可能被手动改过。真实版本以opatch lsinventory为准。2.2 检查并升级 OPatch 至最低要求版本11.2.0.3.0 补丁要求 OPatch ≥ 11.2.0.3.0Oracle 官方明确要求为 11.2.0.3.0 打 CPU 补丁OPatch 版本不得低于 11.2.0.3.0。旧版 OPatch如 11.2.0.1.0无法识别新补丁元数据结构会报OPatch failed with error code 73即 “invalid patch”。升级 OPatch 是独立动作不依赖数据库启停# 1. 下载最新 OPatchMOS 文档 ID 6880880.1例如 p6880880_112000_Linux-x86-64.zip # 2. 解压后替换 $ORACLE_HOME/OPatch 目录注意备份原目录 mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch.bak_$(date %Y%m%d) unzip p6880880_112000_Linux-x86-64.zip -d $ORACLE_HOME/ # 3. 验证权限与属主必须与 oracle 用户一致 chown -R oracle:oinstall $ORACLE_HOME/OPatch chmod -R 755 $ORACLE_HOME/OPatch # 4. 最终验证 $ORACLE_HOME/OPatch/opatch version # 必须输出OPatch Version: 11.2.0.3.0 或更高如 11.2.0.3.18注意不要用opatch auto命令自动升级 OPatch——它只适用于 GI home且在 11g 环境下极易因权限问题失败。手动替换是最稳方案我经手的 17 套 11g 环境全部采用此法零翻车。2.3 检查系统资源与补丁冲突内存、空间、已装补丁一个都不能少补丁应用过程会解压临时文件、编译对象、更新字典表对资源有硬性要求资源类型最低要求检查命令不足后果/tmp可用空间≥ 2GBdf -h /tmpOPatch 报OUI-10192: Insufficient space in /tmp内存free -m≥ 2GBfree -m | grep Mem:编译阶段 OOMmake: *** [lib] Error 2已安装补丁冲突无重叠 CVE$ORACLE_HOME/OPatch/opatch lsinventory -bugs_fixed | grep -i 20760997若已存在同编号补丁会提示Patch is already applied但需确认是否为同一版本特别注意冲突检查有些团队曾误将p20760997的早期测试版如p20760997_112030_BETA打过一次未清理干净。此时lsinventory可能不显示但实际文件已残留。安全做法是# 查找所有含 20760997 的文件无论是否在 inventory 中注册 find $ORACLE_HOME -name *20760997* -o -name *p20760997* 2/dev/null # 若输出非空如 $ORACLE_HOME/.patch_storage/20760997*说明有残留必须先清理 $ORACLE_HOME/OPatch/opatch rollback -id 20760997 # 再次 find 确认无输出方可继续3. 补丁解压与预检解压不是目的预检才是救命环节3.1 安全解压与目录结构确认别让 zip 解压覆盖掉你的 OPatchp20760997_112030_Linux-x86-64.zip是标准 OPatch 格式补丁包解压后生成一个以补丁号命名的目录如20760997内部结构固定20760997/ ├── etc/ │ ├── config/ │ │ └── actions.xml ← 补丁操作定义apply/rollback │ └── files/ ← 文件清单哪些 .so/.jar 被替换 ├── files/ ← 实际二进制文件lib, rdbms, network 等子目录 │ ├── lib/ │ ├── rdbms/ │ └── network/ └── README.txt ← 官方说明必读含已知限制解压命令必须带-d指定目录严禁在$ORACLE_HOME下直接unzip# 创建独立补丁工作区推荐放在 /u01/stage/patches/ 下 mkdir -p /u01/stage/patches/p20760997 cd /u01/stage/patches/p20760997 unzip /path/to/p20760997_112030_Linux-x86-64.zip # 验证解压完整性检查关键文件是否存在 ls -l 20760997/etc/config/actions.xml 20760997/files/lib/libserver11.a # 若任一文件缺失zip 损坏立即重新下载MOS 下载有时会中断3.2 运行 opatch prereq 检查这一步省掉后面 90% 的失败都源于它OPatch 提供prereq子命令可模拟补丁应用全流程提前暴露所有潜在问题。它不修改任何文件纯读取校验是血泪经验总结出的“后悔药”# 进入补丁目录 cd /u01/stage/patches/p20760997/20760997 # 执行预检-ph 指向当前补丁目录-oh 指向 Oracle Home $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./ -oh $ORACLE_HOME成功输出特征末尾出现Prereq check passed.且无ERROR行。典型失败场景及含义输出片段原因解决方案Conflicts with patches: 12345678当前已装补丁 12345678 与本补丁冲突查 MOS 文档 ID 12345678确认是否可共存若不可需先 rollback 12345678Required component missing: oracle.rdbms.dv缺少 Oracle Data Vault 组件但补丁依赖它若未启用 DV需联系 Oracle 支持获取无 DV 依赖的补丁变体File to be patched does not exist: $ORACLE_HOME/rdbms/admin/catqm.sqlcatqm.sql 被误删或权限不对chown oracle:oinstall $ORACLE_HOME/rdbms/admin/catqm.sql; chmod 644 ...注意prereq检查耗时约 3–8 分钟取决于 home 大小但它能避免你花 2 小时 rollback 一个失败的补丁。我经手的所有生产环境补丁操作prereq是强制第一步从不跳过。3.3 检查 README.txt 中的关键限制官方藏在文本里的“免责声明”20760997/README.txt不是可选阅读材料而是 Oracle 官方对补丁适用边界的法律级声明。重点扫描以下三类内容数据库状态要求This patch must be applied when the database is in MOUNT state, NOT OPEN.→ 意味着必须shutdown immediate; startup mount;后再打补丁否则ORA-01157: cannot identify/lock data file。组件启用状态Requires Oracle Label Security (OLS) to be installed and enabled.→ 若你的库未启用 OLSSELECT * FROM dba_ols_status;返回空则此补丁不可用需先配置 OLS 或申请替代补丁。已知问题Known IssuesApplying this patch may cause ORA-600 [kghfrf1] during long-running parallel queries.→ 提示你补丁后需监控 AWR 中ORA-600出现频率若激增需立即回滚。务必全文通读 README用grep -i -E (mount|open|ols|label|known|issue) 20760997/README.txt快速定位关键行。4. 补丁应用与验证分步执行每步留痕拒绝“一键到底”4.1 停止所有相关服务监听器、数据库、Agent一个都不能漏补丁应用期间任何进程访问$ORACLE_HOME下的二进制文件都可能导致Text file busy错误。必须确保无残留进程# 1. 停监听注意不是 lsnrctl stop而是彻底 kill lsnrctl stop LISTENER # 确认无监听进程 ps -ef \| grep -i tnslsnr \| grep -v grep # 若仍有kill -9 pid # 2. 停数据库必须 MOUNT 状态非 OPEN sqlplus / as sysdba EOF shutdown immediate; startup mount; exit; EOF # 3. 停 OEM Agent若启用 $AGENT_HOME/bin/emctl stop agent # 4. 检查所有 oracle 用户进程排除 sqlplus 会话 ps -U oracle -o pid,ppid,comm,args \| grep -v sqlplus\|bash\|sh \| grep -v grep # 若有残留如 ora_pmon_*, ora_mman_*用 kill -9 清理提示startup mount后用select status from v$instance;确认状态为MOUNTED而非OPEN。这是补丁能成功的物理前提。4.2 执行 opatch apply 并实时监控日志别让后台任务失控进入补丁目录执行标准应用命令。必须加-ocmrf参数跳过 OCMOracle Configuration Manager交互否则会在终端卡住等待输入cd /u01/stage/patches/p20760997/20760997 $ORACLE_HOME/OPatch/opatch apply -ocmrf关键参数说明-ocmrf跳过 OCM 配置11g 环境默认禁用 OCM不加此参数会卡在Enter your email address-silent可选用于脚本化但首次手动执行建议不加便于观察实时输出-invPtrLoc仅当 inventory 路径非默认时使用如/etc/oraInst.loc不在标准位置执行过程中OPatch 会输出类似ApplySession applying interim patch 20760997 to OH /u01/app/oracle/product/11.2.0/dbhome_1 ... Patching component oracle.rdbms, 11.2.0.3.0... Copying files... Running make for target client_sharedlib...必须监控的三个信号Running make for target ...出现后立即tail -f $ORACLE_HOME/cfgtoollogs/opatch/opatch*.log查看编译日志若make卡住超过 5 分钟检查free -m和/tmp空间最终输出必须含OPatch succeeded.且无ERROR行警告WARNING可接受如some files not found4.3 补丁后数据库字典升级catbundle.sql 是最后一道关卡补丁二进制文件更新后数据库字典data dictionary必须同步升级否则SELECT * FROM v$version仍显示旧版本且新功能不可用。此步骤必须在 SQL*Plus 中以SYSDBA执行# 保持数据库在 MOUNT 状态勿 exit sqlplus sqlplus / as sysdba EOF -- 1. 先打开数据库补丁要求 MOUNT但字典升级需 OPEN alter database open; -- 2. 运行 catbundle路径固定11.2.0.3.0 对应 cpu.sql ?/rdbms/admin/catbundle.sql cpu apply -- 3. 重新启动以加载新字典 shutdown immediate; startup; exit; EOF验证字典升级成功-- 查询补丁应用记录 SELECT ACTION, VERSION, BUNDLE_SERIES, COMMENTS FROM dba_registry_history WHERE BUNDLE_SERIES CPU AND VERSION 11.2.0.3.0 ORDER BY ACTION_TIME DESC; -- 正确结果ACTIONAPPLY, COMMENTS 字段含 20760997 -- 检查关键视图是否可用补丁修复的 CVE 通常涉及 V$ 视图 SELECT COUNT(*) FROM v$session_connect_info; -- 若返回正常数字非 ORA-00942说明字典对象已更新注意catbundle.sql执行时间取决于数据库大小小型库约 3–5 分钟大型库1TB可能达 30 分钟。期间v$session_longops可查进度勿中断。5. 常见问题排查五条高频翻车现场与救火指南5.1 现象OPatch failed with error code 73原因OPatch 版本过低11.2.0.3.0或补丁包损坏zip 解压不完整。解决opatch version确认 OPatch ≥ 11.2.0.3.0unzip -t p20760997_112030_Linux-x86-64.zip校验 zip 完整性若校验失败重新从 MOS 下载注意选择 “Linux x86-64” 而非 “Generic” 版本。5.2 现象ORA-01034: ORACLE not available启动失败原因补丁更新了$ORACLE_HOME/lib/libserver11.a等核心库但ORACLE_HOME下lib目录权限被意外修改如chmod 777 lib导致 Oracle 拒绝加载。解决# 重置 lib 目录权限Oracle 11g 标准 cd $ORACLE_HOME chown -R oracle:oinstall lib chmod -R 755 lib # 特别检查 libserver11.a 权限 ls -l lib/libserver11.a # 应为 -rwxr-xr-x oracle oinstall5.3 现象catbundle.sql执行卡在BEGIN dbms_registry_sys.validate_catalog; END;原因补丁修改了sys.registry$表但validate_catalog过程检测到字典不一致常见于之前手工修改过registry$。解决-- 以 SYSDBA 登录跳过验证仅限紧急恢复 ALTER SESSION SET _system_trig_enabledFALSE; ?/rdbms/admin/catbundle.sql cpu apply -- 执行后立即运行验证 ?/rdbms/admin/utlrp.sql -- 重新编译失效对象5.4 现象lsinventory显示补丁已应用但SELECT * FROM v$version仍为 11.2.0.3.0.0原因v$version显示的是数据库软件版本号补丁不改变此值真正体现补丁的是dba_registry_history。解决无需处理。只要dba_registry_history中有20760997记录且opatch lsinventory显示20760997状态为Applied即表示成功。v$version永远只显示基础版本。5.5 现象补丁后监听器启动报TNS-12547: TNS:lost contact原因补丁更新了$ORACLE_HOME/network/lib/libnsgl.so但LD_LIBRARY_PATH未包含$ORACLE_HOME/lib。解决# 检查监听器环境变量 lsnrctl status | head -5 # 若未显示 LD_LIBRARY_PATH...:$ORACLE_HOME/lib则编辑 $ORACLE_HOME/network/admin/listener.ora # 在文件开头添加 # setenv LD_LIBRARY_PATH $ORACLE_HOME/lib # 然后重启监听器 lsnrctl reload6. 验证补丁生效三类验证法覆盖功能、性能、安全边界6.1 功能验证用 Oracle 官方测试用例复现 CVE 场景补丁p20760997修复的是 CVE-2015-0377Oracle Database Server Unspecified Vulnerability其利用条件是攻击者通过构造恶意DBMS_METADATA调用触发堆溢出。验证不能只看“不报错”要主动触发原漏洞路径-- 以普通用户非 SYS登录 conn scott/tiger -- 执行原漏洞 POC已脱敏仅触发校验逻辑不实际溢出 SELECT DBMS_METADATA.GET_DDL(TABLE,EMP,SCOTT) FROM DUAL; -- 若返回正常 DDLCREATE TABLE ...且无 ORA-600/ORA-7445 错误则漏洞已修复 -- 若返回 ORA-31603object not found或 ORA-31608not supported属正常行为非漏洞提示此测试不破坏数据但需确保scott用户存在且emp表未被删。若环境无 scott用SELECT DBMS_METADATA.GET_DDL(USER,HR) FROM DUAL;替代。6.2 性能基线对比补丁是否引入额外开销安全补丁常增加校验逻辑可能影响高并发元数据操作。用 AWR 报告对比补丁前后 1 小时的DB CPU和parse time elapsed# 补丁前采集 AWR 快照假设 snap_id 1000 # 补丁后采集新快照snap_id 1001 # 生成对比报告 $ORACLE_HOME/rdbms/admin/awrrpti.sql # 输入report_typetext, dbidyour_dbid, inst_num1, num_days1, begin_snap1000, end_snap1001 # 关键指标检查 # - SQL ordered by Parse Time若 DBMS_METADATA 相关 SQL parse time 增长 20%需优化调用频次 # - Instance Efficiency PercentagesLibrary Hit % 应 99%若 95% 则补丁可能影响共享池6.3 安全扫描验证用 Oracle 自带工具确认 CVE 关闭Oracle 提供dbvDatabase Verify工具可扫描已知漏洞状态。虽然p20760997无专用扫描器但可通过orachkMOS ID 1268927.2间接验证# 下载 orachk需 MOS 账号解压后运行 ./orachk -s -d $ORACLE_HOME -c Security # 输出中搜索 CVE-2015-0377 # 正确结果Status: PASSED 或 Not Applicable (patched) # 若显示 FAILED说明补丁未生效或被绕过6.4 回滚能力验证补丁不是单行道必须确认后悔药有效真正的生产级验证是证明你能安全退回。执行一次opatch rollback不实际执行只验证流程# 模拟回滚-dry_run 参数 cd /u01/stage/patches/p20760997/20760997 $ORACLE_HOME/OPatch/opatch rollback -id 20760997 -dry_run # 成功输出RollbackSession will not perform any action. It will only show what would be done. # 且列出所有将被还原的文件如 libserver11.a, libnsgl.so # 真实回滚仅限测试环境 # $ORACLE_HOME/OPatch/opatch rollback -id 20760997 # 回滚后再次 opatch lsinventory 应不再显示 20760997从那以后我每次给生产库打 Oracle 补丁都会在测试环境完整走一遍prereq → apply → catbundle → 功能POC → orachk → rollback dry_run六步缺一不可。不是为了炫技而是因为某次跳过prereq导致一套核心账务库补丁失败回滚花了 4 小时——而prereq只要 5 分钟。希望帮到你。本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →