暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

关于oracle补丁的简单介绍

原创 cqiwen 2021-11-23
2794

经过我们补丁包升级之后,oracle 数据库软件版本中的第 4 位或第 5 位将进行变化,其中第 4 位是补丁集(patch set)号,第 5 位则是补丁集更新(patch set update, psu)号:
.1 的版本为测试版,.2 的版本为稳定版
11.2.0.1-11.2.0.4
12.1.0.1-12.1.0.2

select * from product_component_version;  --查看版本信息
select action,comments from registry$history;  --查看打补丁记录和应用情况

那如何查到目前最新的psu 呢?oracle support站点(我更喜欢叫mos)中有个文档专门更新 psu 的内容,其文档 id 位 756671.1,oracle recommended patches — oracle database。

upgrade 与 update 区别:
upgrade:大版本升级,如 10 到 11g
update:小版本升级,如 11.2.0.1 -- 11.2.0.1.5

简单介绍
Oracle早期版本的补丁一般分为2类:CPU和PSU
CPU:Critical Patch Update,紧急补丁更新。每季度发布一次,用来修复安全方面的累积型补丁,即最新的CPU补丁已经包含以往的CPU补丁,只需安装最新的CPU补丁即可。CPU已更名为SPU(Security Patch Update)。注意:数据库 SPU 正在从数据库 12c 版本中淘汰- CPU 程序的安全性内容将在 Bundle Patch(BP) 或 PSU 中发布;

PSU:Patch Set Update,补丁集更新。Oracle选取在每个季度用户下载数量最多、且得到验证具有较低风险的补丁放入到每个季度的PSU中。在每个PSU中不但包含Bug的修复,还包含了最新的CPU。PSU通常随CPU一起发布。PSU通常是增量的,大部分PSU可以直接安装,但有些PSU必须要求安装上一个版本的PSU之后才能继续安装。

注:不能在同一个 ORACLE_HOME 下混合 BP 和 DB PSU(或 SPU)补丁方法。即打补丁要么使用SPU+PSU,要么使用BP,不能混用。
例如:如果你在一个系统上安装了 "Database Proactive Bundle Patch",那么接下来就不可以在该系统上安装"Database PSU" (DB PSU)。你需要保持在 DBBP 补丁或者完全回滚 DBBP 补丁之后应用 DB PSU 补丁来更换补丁方法。

自oracle 12.2以后,linux平台的Oracle软件版本和补丁的命名方式又发生了变化,之前的Patch Set Updates(PSU)和Proactive Bundle Patches(BP)补丁被Release Updates(RU)和Release Update Revisions(RUR)所替代。
对于上述所说的补丁变化,在windows平台并不受影响,Windows平台的补丁名称还是以前的Bundle Patches(BP)。

StandbyPatch Set Updates(PSU)、 Bundle Patches(BP)、Release Updates(RU)、Release Update Revisions(RUR)的说明
1)PSU补丁包含了2部分内容,安全性修复和回归修复,如漏洞和bug fixes等。
2)BP补丁是PSU补丁的超集,还包含了优化程序和功能修复程序,有时还包括新功能的扩展。
3)PSU和BP都是自我累积的,以PSU举例,当前季度发布的补丁已经包含了所有之前PSU补丁的集合。通常您可以选择每季度更新PSU或者BP补丁。但是您也可以从PSU更改为BP,反之亦然。
4)RU非常类似于之前的BP补丁,也是每季度发布。第2版发布的RU包含了所有RU-1的内容和一些修复程序,与BP相同,RU也是自我累积的。
5)RUR跟PSU不大一样,通常BP和PSU补丁都是同步更新的,但第一版RU补丁发布时,并没有对应的RUR补丁发布。第一版RUR发布通常是在第一版RU发布后的下个季度。RUR包含第一版RU的全部内容以及安全性修复和回归修复。回归修复程序的内容多是针对不当行为的修复程序,很多都是基于用户的反馈。
6)您可以选择使用RUR第1版补丁, 它包含了第1版RU的修正程序和新的安全性和回归修补程序,或者直接安装RU以及新的RU(此时应该是第2版的RU),包含了第1版RU的所有修正,还包含了新的优化程序或功能修复程序。

总结:
对于linux系统上的oracle,能直接打RUR就直接打RUR,没有RUR就打RU。没有RU就打BP或PSU。
对于windows系统,能打BP就打BP,否则打PSU。


opatch: 是 oracle 为了安装管理个别补丁而设计的工具,从 oracle 9.2 版开始提供使用。通过 opatch 工具,dba 可以方便安装、卸载补丁,也可以检测冲突等。

oracle补丁安装流程:

1)在mos上或其它途径下载opatch软件和oracle最新补丁;
2)上传补丁相关文件至oracle服务器
3)查看补丁文档,按照文档进行操作。执行以下命令查看当前系统补丁情况:
  $ORACLE_HOME/OPatch/opatch lsinventory  --查看系统已经安装的补丁集
  select action,comments from registry$history;
  select ACTION,VERSION,BUNDLE_SERIES,COMMENTS from dba_registry_history;
4)根据补丁文档的要求安装对应opatch软件版本
  01. 下载最新版本的 opatch 工具
  02. 备份$ORACLE_HOME 目录下的旧版本的 opatch ,解压按补丁要求下载的 opatch 工具到$ORACLE_HOME目录
  03. 把 opatch 的目录包含进 path 环境变量中 export path=$ORACLE_HOME/opatch:$path
  04. 操作系统命令行下输入 opatch
  opatch version  --查看版本
5)备份oracle软件和数据库,推荐使用rman备份数据库;建议先在测试库上安装补丁。
6)停止所有数据库服务(windows服务器上还要在服务里手动关闭其它oracle相关服务)
  lsnrctl stop
  sqlplus "/as sysdba"
  shutdown immediate
7)检查补丁冲突情况,补丁预演,打补丁
8)升级rman catalog
rman target sys/oracle@testdb01 catalog rman/rman@testdb01
rman> upgrade catalog
rman> upgrade catalog

------------------------另一套流程------------------------
步骤:
01,下载并解压OPatch和补丁文件
02,停业务,停数据库、监听、相关DB服务和OEM
03,备份
  A,全库备份
  B,备份数据库安装代码(要停库操作)
04,补丁安装冲突检查
05,安装PSU数据库代码补丁
06,启数据库,安装PSU数据库补丁(执行SQL)
07,升级RMAN CATALOG(如果有)
08,补丁安装验证
09,启业务,测试应用。
--------------------------------------------------------------------
另外,还可以在打补丁之前运行一次permission.pl 脚本,让其备份原来目录文件的权限,以作不时之需。

如果主库有配置goldengate,在DDL支持启用时,对数据库打补丁和更新:
数据库补丁和升级常常会使GoldenGateDDL触发器和其他的GoldenGateDDL对象失效。在应用数据库补丁之前,执行下面的步骤:
1.禁用GoldenGate DDL触发器
进入ogg安装目录,进入sqlplus执行
@ddl_disable.sql
2.应用补丁;
3.启用DDL触发器 @ddl_enable.sql

其它相关:
--interim patch/one-off patch小补丁安装案例及回滚

--在线打补丁
opatch apply online -connectstring db01:sys:oracle:    --右侧为db_name:sys用户:密码

--PSU补丁的回滚过程
--在线回滚补丁
opatch rollback -id id号 online -connectstring db01:sys:oracle:  
--离线回滚补丁
opatch rollback -id id号  
@?/rdbms/admin/catbundle_PSU_DB01_ROLLBACK.sql    --执行$oracle_home/admin目录下的对应sid的ROLLBACK.sql脚本

实战:
流程:检查已经安装的补丁情况和opatch版本----> 解压补丁集,根据其中的安装文档选择合适的opatch ----> 替换opatch ----> 备份数据库,完成后关闭数据库、监听、EM管理器---->生成ocm.rsp ---->opatch apply 应用补丁集 ---->更新字典,编译无效对象,升级rman catalog

准备工作:
$ORACLE_HOME/OPatch/opatch lsinv

查看补丁说明文档,下载对应版本的OPatch工具包,备份和替换旧的OPatch
mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch.bak
mv OPatch $ORACLE_HOME/

$ORACLE_HOME/OPatch/opatch lspatches
$ORACLE_HOME/OPatch/opatch lsinv
$ORACLE_HOME/OPatch/opatch version

sqlplus / as sysdba
select ACTION,VERSION,BUNDLE_SERIES,COMMENTS from dba_registry_history;

如果数据库开了归档,则使用rman备份数据库,然后shutdown immediate关闭数据库。
如果没开归档,则先将数据库设置为只读,然后用expdp备份全库,备份完成后关闭数据库。
最后使用tar等方式冷备oracle home目录的所有内容,空间允许还可以冷备份所有数据文件。
再次确认已经关闭数据库和监听: lsnrctl stop

安装补丁:
首先oracle用户解压补丁文件,假设解压后为/opt/psu/20760997
--检查PSU补丁是否有冲突:
cd 20760997
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./  --必须要在20760997目录中执行此命令
$ORACLE_HOME/OPatch/opatch prereq CheckActiveFilesAndExecutables -ph ./

--手动生成OPatch所需的OCM(Oracle Configuration Manager)文件ocm.rsp:
$ORACLE_HOME/OPatch/ocm/bin/emocmrsp
提示输入邮箱,不要输入任何东西,直接回车再输入y即可在当前目录下生成一个ocm.rsp
升级GRID,用grid用户创建ocm文件(ocm.rsp);
升级DB,用oracle用户创建ocm文件;

--打补丁
单机+文件系统:
opatch apply -report    --补丁预演(不会实际安装)
$ORACLE_HOME/OPatch/opatch apply -silent -ocmrf ocm.rsp

RAC+ASM:(根据说明文档指示来做,有可能只需要一个节点执行即可)
$ORALCE_HOME/OPatch/opatch auto /opt/psu/20760997 -oh $GRID_HOME -ocmrf /opt/psu/ocm.rsp
$ORALCE_HOME/OPatch/opatch auto /opt/psu/20760997 -oh $ORACLE_HOME -ocmrf /opt/psu/oraocm.rsp

以下是部分输出:
OPatch found the word "warning" in the stderr of the make command.
Please look at this stderr. You can re-run this make command.
Stderr output:
ins_precomp.mk:19: warning: overriding commands for target `pcscfg.cfg'
/oracle/app/oracle/product/11.2.0/db_1/precomp/lib/env_precomp.mk:2160: warning: ignoring old commands for target `pcscfg.cfg'
/oracle/app/oracle/product/11.2.0/db_1/precomp/lib/ins_precomp.mk:19: warning: overriding commands for target `pcscfg.cfg'
/oracle/app/oracle/product/11.2.0/db_1/precomp/lib/env_precomp.mk:2160: warning: ignoring old commands for target `pcscfg.cfg'

OPatch found the word "warning" in the stderr of the make command.
Please look at this stderr. You can re-run this make command.
Stderr output:
ins_emagent.mk:113: warning: overriding commands for target `nmosudo'
ins_emagent.mk:52: warning: ignoring old commands for target `nmosudo'
/oracle/app/oracle/product/11.2.0/db_1/sysman/lib/ins_emagent.mk:113: warning: overriding commands for target `nmosudo'
/oracle/app/oracle/product/11.2.0/db_1/sysman/lib/ins_emagent.mk:52: warning: ignoring old commands for target `nmosudo'

Composite patch 20760997 successfully applied.
OPatch Session completed with warnings.
Log file location: /oracle/app/oracle/product/11.2.0/db_1/cfgtoollogs/opatch/opatch2021-05-19_10-12-28AM_1.log
有两个warning,直接忽略。

启动数据库,升级字典,编译无效对象:
sqlplus / as sysdba
startup
@?/rdbms/admin/catbundle.sql psu apply
@?/rdbms/admin/utlrp.sql  --编译失效对象
select * from dba_registry_history;

如果有使用rman catalog,则还需要升级catalog
rman catalog username/password@alias
RMAN> UPGRADE CATALOG;

验证安装了哪些补丁:
$ORACLE_HOME/OPatch/opatch lsinventory -patch

最后修改时间:2021-11-25 10:52:57
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论