Oracle数据库补丁知识总结
Oracle数据库补丁知识总结
本文讲述的Oracle补丁相关内容包含:
1、单个补丁
2、PSU/RU/RUR/CPU 补丁集
3、opatch工具
特别注意事项:
1、所有的补丁安装(特别是psu补丁集等),一般要下载最新的opatch工具程序,这样就可以检测最新的所有补丁冲突了。如果使用旧版本的opatch,由于程序库问题,则冲突可能检测不出来。这一点需要特别注意!
2、每个补丁包中基本都包含一个README.html文档,其中描述了如何安装该补丁的内容,非常详细,建议每次安装任何补丁前都看一遍。
3、PSU/RU/RUR/CPU 补丁集的安装,最后一般都需要更新数据库(更新数据字典),将修改过的SQL文件应用到数据库中,更新数据库中的数据字典,这一步非常重要。
4、PSU补丁集的安装方法可以参考我以前的文章《Oracle 11g单库环境PSU补丁安装》
一、Oracle单个补丁
顾名思义,单个补丁,针对的是Oracle软件运行单独的某一个漏洞发布的,用于对单个漏洞进行修复。单个补丁的安装,只需要对Oracle数据库软件进行打补丁,一般不需要对数据库进行修改(不需要更新数据字典内容)
(1)单个补丁的安装流程:
1、将计划补丁包下载到一个目录,例如/u01/psu/patches(注意使用SHA-256或MD5校验工具验证文件完整性,确保文件未被篡改)
2、解压 unzip -q p<补丁编号>.zip -d /u01/psu/patches/
3、冲突检测
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -phBaseDir /u01/app/oracle/patches/<补丁目录>
4、安装补丁
cd /u01/app/oracle/patches/<补丁目录>
$ORACLE_HOME/OPatch/opatchopatch apply -local
检查补丁
$ORACLE_HOME/OPatch/opatch lsinventory
补丁回滚
opatch rollback -id <patchid号> -local
(2)多个补丁一起安装
将计划的多个补丁,解压存放至同一个目录例如/u01/psu/patches
检查冲突
$ORACLE_HOME/OPatch/opatch prereq CheckConflictAmongPatchesWithDetail -phBaseDir $ORACLE_HOME/patches
一起安装多个补丁
$ORACLE_HOME/OPatch/opatch napply $ORACLE_HOME/patches -skip_subset -skip_duplicate -local
(3)RAC集群环境单个补丁安装注意
安装补丁时,一般必须加上-local选项,表示只安装本节点
需要确认补丁是否为roll patch,如果是,则可以节点轮流安装补丁。(停止一个节点,安装补丁,启动该节点,停止另外的节点,轮流安装,不会中断业务)
确认方法:
opatch query . --是否为roll patch
在oracl rac环境中,经常需要滚动打补丁(rolling patch),对于一个补丁是否是rolling patch,可以用如下两种方式进行检查。
1、使用opatch query命令
cd /u01/app/oracle/patches/<补丁目录>
$ORACLE_HOME/OPatch/opatch query . |grep rolling
Patch is a rolling patch: true
//true表示该补丁为roll patch
2、直接查看补丁包中的inventory文件
inventory文件具体位置: <patchid>/etc/config/inventory
打开inventory文件,查找 <online_rac_installable>,如果为true,则支持rolling patch
<online_rac_installable>true</online_rac_installable>
//true表示该补丁为roll patch
二、PSU/RU/RUR/CPU 补丁集
(1)PSU/RU/RUR/CPU 补丁集的安装,最后一般都需要更新数据库(更新数据字典),将修改过的SQL文件应用到数据库中,更新数据库中的数据字典,这一步非常重要。
可以查看readme.html文件,一般方法如下:
cd $ORACLE_HOME/rdbms/admin
sqlplus / as sysdba
SQL> STARTUP
SQL> @catbundle.sql psu apply
SQL> QUIT
(2)PSU 全称Patch Set Updates
Oracle对于其产品每个季度发行一次的补丁包,包含了bug的修复。Oracle选取被用户下载数量多的,并且被验证过具有较低风险的补丁放入到每个季度的PSU中。在每个PSU中不但包含Bug的修复而且还包含了最新的CPU。
主要作用
1. 减轻PSR周期长而带来的不能及时更新的影响
2. 解决多个个别补丁冲突和相互影响的问题
3. 减轻DBA安装补丁的负担:补丁安装次数,不定期检查补丁发布
PSU具有如下特点:
1、PSU是PSR的补充,在两次PSR发布之间发布多个PSU,加快更新速度。每个PSU修改5位版本号的第5位。例如11.2.0.4.7(其中第五位7代表psu)
2、每个PSU中包含25至100个重要补丁,作为一个整体进行严格测试,解决冲突问题,保证系统的稳定性。PSU不仅包括对功能、性能修复的一般补丁,也包括安全补丁。
3、PSU定期发布,计划一年分布四次,发布日期与CPU发布日期相同。由于PSU包括同期发布的CPU,只要安装PSU即可。(对部分平台,仍提供单独的CPU,供客户选择)
4、如同PSR和CPU一样,PSU是累积型的,即只要安装最新的PSU就自动包括以前所有PSU的内容。
5、使用DBA已经熟悉的Opatch工具安装/删除PSU,命令仍是apply和rollback。一个PSU可视作一个个别补丁,安装和删除操作都很简便。
6、现有的个别补丁与PSU的关系分为三类:完全独立;是PSU的一部分;与PSU冲突。第一类的个别补丁与PSU相互没有影响,可以独立的安装或删除。对于第二类,在安装PSU之后,自然没有必要安装。若在PSU之前已安装,则在安装PSU时会被自动删除。对于第三类个别补丁,如在PSU之前已安装,必须在安装PSU时删除。客户可以向Oracle公司技术支持部门提出申请,由Oracle负责提供与PSU不冲突的,在PSU之上安装的相应的新的版本。
如何查找最新的PSU?
MOS站点中Oracle Recommended Patches — Oracle Database [ID 756671.1] 文档中查到各个产品版本最新的PSU。
如何正确安装PSU?
每个PSU安装包中都包含一个README.html文档,其中描述了如何安装该PSU,有些PSU是可以直接安装的,而有些PSU则必须要求安装了上一个版本的PSU之后才能继续安装。
如何确认当前数据库已经安装了什么PSU/CPU?
无论是从V$VERSION或者DBA_REGISTRY或者PRODUCT_COMPONENT_VERSION视图中,都无法查找到PSU的信息,这些视图中始终显示的是最原始的版本,比如11.2.0.4.0。
方法一、opatch命令查看
opatch lsinventory -bugs_fixed | grep -i ‘DATABASE PSU’
或者
opatch lsinv
方法二、查看registry$history表
set linesize 200
col action_time format a30
col id format a10
col comments format a30
col bundle format a5
select substr(action_time,1,30) action_time,
substr(id,1,10) id,
substr(action,1,10) action,
substr(version,1,8) version,
substr(BUNDLE_SERIES,1,6) bundle,
substr(comments,1,20) comments
from registry$history;
ACTION_TIME ID ACTION VERSION BUNDL COMMENTS
------------------------------ ---------- -------------------- ---------------- ----- ------------------------------
BOOTSTRAP 19 RDBMS_19.3.0.0.0DBRU
12-MAR-26 06.02.05.344509 PM RU_APPLY 19.0.0.0 Patch applied on 19.
注意:该表的内容是在上述安装PSU步骤的第三步中运行catbundle.sql才会插入的,因此如果该步骤忘记执行,则此表中无记录。因此我们在作数据库健康检查的时候不但要用opatch检查当前数据库最新的PSU补丁,也要检查registry$history表,以确认其它DBA是否正确地完成了PSU的安装。
(3)RU 全称Release Updates
Oracle 从 12.2 版本开始补丁包的名字不再叫 PSU,改成了 RU (Release Updates) 。
RU 是 Oracle 提供的标准更新,包含所有新的修复、改进和增强,通常每个主版本(例如12c、18c、19c)会定期发布 RU。发布 RU 时,它会集成一些之前发布的补丁,并且包含对数据库健康和功能的修复与优化。RU 包含自上次发布以来的所有错误修复、功能改进和安全补丁,因此它是一次集中的更新,通常无需单独安装每个补丁(通常在每个季度发布一次 RU,类似以前的 CPU)。
(4)RUR全称Release Update Revisions
RUR 是 RU 的一个更新版本,表示在原始 RU 基础上进行的修复。RUR 是对原始 RU 补丁的修正版本,通常不包含新的功能增强,但会包含对于原RU的修复。它帮助解决 RU 发布后的漏洞或问题,并且比完整的 RU 更新更小(RUR 通常在 RU 发布后的几周或几个月内发布,用于解决 RU 本身存在的 bug 或其他问题,RUR 并不会加入新的特性)。
(5)RU 和 RUR的查询方法,与PSU的查询方法一下
方法一、opatch命令查看
opatch lsinventory -bugs_fixed | grep -i ‘DATABASE PSU’
或者
opatch lsinv
方法二、查看registry$history表
set linesize 200
col action_time format a30
col id format a10
col comments format a30
col bundle format a5
select substr(action_time,1,30) action_time,
substr(id,1,10) id,
substr(action,1,10) action,
substr(version,1,8) version,
substr(BUNDLE_SERIES,1,6) bundle,
substr(comments,1,20) comments
from registry$history;
ACTION_TIME ID ACTION VERSION BUNDL COMMENTS
------------------------------ ---------- -------------------- ---------------- ----- ------------------------------
BOOTSTRAP 19 RDBMS_19.3.0.0.0DBRU
12-MAR-26 06.02.05.344509 PM RU_APPLY 19.0.0.0 Patch applied on 19.
注意:该表的内容是在上述安装PSU步骤的第三步中运行catbundle.sql才会插入的,因此如果该步骤忘记执行,则此表中无记录。因此我们在作数据库健康检查的时候不但要用opatch检查当前数据库最新的PSU补丁,也要检查registry$history表,以确认其它DBA是否正确地完成了PSU的安装。
(6)CPU: Critical Patch Update
Oracle对于其产品每个季度发行一次的安全补丁包,通常是为了修复产品中的安全隐患。
三、opatch工具
备注:该工具默认保存在ORACLE_HOME/OPatch/目录中,由于该目录不在PATH环境变量中,不能直接调用
一般需要全路径调用:ORACLE_HOME/OPatch/opatch
或者设置环境变量export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
从9.2版开始,Oracle公司设计实现了个别补丁安装管理工具opatch.opatch使用一个称为inventory的系统数据结构(严格说是与oui共享inventory),集中管理所有已安装的个别补丁;
个别补丁的安装和卸载都使用opatch命令完成,冲突检测也由opatch在安装时自动完成;
10g以后的版本中,opatch作为一个标准工具,在软件安装时自动安装。(安装在$ORACLE_HOME/OPatch下)
opatch命令格式为:
opatch < command > [< command_options >] [ -h[elp] ]
命令有:apply(安装个别补丁)、rollback(卸载个别补丁)、lsinventory(对inventory进行列表)、query(显示某一个别补丁的详细信息)、version(显示opatch版本信息)。
在opatch目录下,有用户使用指南文件(Users_Guide.txt),其中有详细的命令格式和使用示例,读者可以参考。
Opatch执行操作时,除在屏幕输出结果外,还生成日志文件。日志文件的路径和文件名格式如下:
$ORACLE_HOME/.patch_storage/< patch_id >/< action >-< patch_id >_< mm-dd-yyyy_hh-mi-ss>.log
其中“patch_id”是Oracle技术支持部门为个别补丁分配的编号。
常用的一些opatch命令
$ORACLE_HOME/OPatch/opatch lsinventory
$ORACLE_HOME/OPatch/opatch apply -local
$ORACLE_HOME/OPatch/opatch rollback -id xxxx -ph /…/xxxx
备注:
使用opatch显示已安装的版本信息,不需要启动数据库,执行加选项的对inventory的列表命令,可以得到已安装的软件的各个组件的详细版本信息。
$ORACLE_HOME/OPatch/opatch lsinventory -detail
浙公网安备 33010602011771号