1. 什么是psu/cpu? cpu: critical patch update oracle对于其产品每个季度发行一次的安全补丁包,通常是为了修复产品中的安全隐患。 psu: patch set updates oracle对于其产品每个季度发行一次的补丁包,包含了bug的修复。oracle选取被用户下载数量多的,并
1. 什么是psu/cpu?
cpu: critical patch update
oracle对于其产品每个季度发行一次的安全补丁包,通常是为了修复产品中的安全隐患。
psu: patch set updates
oracle对于其产品每个季度发行一次的补丁包,包含了bug的修复。oracle选取被用户下载数量多的,并且被验证过具有较低风险的补丁放入到每个季度的psu中。在每个psu中不但包含bug的修复而且还包含了最新的cpu。
2. 如何查找最新的psu?
每个数据库版本都有自己的psu,psu版本号体现在数据库版本的最后一位,比如最新的10.2.0.5的psu是10.2.0.5.3,而11.2.0.2的最新psu则是11.2.0.2.2。
mos站点中oracle recommended patches — oracle database [id 756671.1] 文档中查到各个产品版本最新的psu。
如果你记不住这个文档号,那么在mos中以“psu”为关键字搜索,通常这个文档会显示在搜索结果的最前面。
注意:必须购买了oracle基本服务获取了csi号以后才有权限登陆mos站点。
3. 如何正确安装psu?
每个psu安装包中都包含一个readme.html文档,其中描述了如何安装该psu,有些psu是可以直接安装的,而有些psu则必须要求安装了上一 个版本的psu之后才能继续安装。比如对于10.2.0.4版本的数据库来说,psu 10.2.0.4.4可以直接安装在最原始的10.2.0.4.0版本中,,而最新的psu 10.2.0.4.8则必须要求先安装10.2.0.4.4。这些信息在readme.html中都可以找到,所以请仔细阅读该文档。
通常安装psu是比较简单的,步骤如下:
1) 安装psu需要使用到opatch,在readme.html中有描述该psu需要的最低版本opatch,如果当前opatch版本过低,则需要先下载 patch 6880880,该patch中包含最新的opatch,只需要解压覆盖原先的$oracle_home/opatch目录即可。
查看当前的opatch版本,可以使用opatch version命令。
$ opatch version
invoking opatch 10.2.0.5.2
opatch version: 10.2.0.5.2
opatch succeeded.
2)安装psu,请仔细阅读readme.html,确认安装命令,通常是简单的opatch apply。
$opatch apply
3)更新数据库,将修改过的sql文件应用到数据库中,很多dba在执行完上述安装命令以后就不再进行这一步,那么实际上psu是没有完整安装的。
cd $oracle_home/rdbms/admin
sqlplus / as sysdba
sql> startup
sql> @catbundle.sql psu apply
sql> quit
注意:如果psu是overlay psu,比如10.2.0.4.8,则需要执行@catbundle.sql opsu apply,同样这些在readme.html中都有详细描述。
4)重新编译cpu相关视图。该步骤在一个数据库上永远只需要执行一次,是为了完成在2008年1月份第一次发布cpu补丁时的后续工作,如果在安 装以前的psu或者cpu时执行过这个步骤那么就可以无需再次执行,另外,即使不执行该步骤,数据库也是正常运行的,只不过意味着2008年1月份的 cpu补丁没有正常结束安装。
cd $oracle_home/cpu/view_recompile
sqlplus / as sysdba
sql> @recompile_precheck_jan2008cpu.sql
sql> shutdown immediate
sql> startup upgrade
sql> @view_recompile_jan2008cpu.sql
sql> shutdown;
sql> startup;
sql> quit
注意:该步骤由于需要重新编译大量视图,因此要启动数据库到upgrade状态才可以完成。也就是将引起停机时间。
4. 如何确认当前数据库已经安装了什么psu/cpu?
无论是从v$version或者dba_registry或者product_component_version视图中,都无法查找到psu的信息,这些视图中始终显示的是最原始的版本,比如10.2.0.4.0。
最常用的方法是使用opatch命令。在打完最新的psu 10.2.0.4.8的10.2.0.4数据库中会有以下显示。
$ opatch lsinventory -bugs_fixed | grep -i 'database psu'
9654991 11724977 wed may 25 16:37:17 cst 2011 database psu 10.2.0.4.5 (requires pre-requisite
9952234 11724977 wed may 25 16:37:17 cst 2011 database psu 10.2.0.4.6 (requires pre-requisite
10248636 11724977 wed may 25 16:37:17 cst 2011 database psu 10.2.0.4.7 (requires pre-requisite
11724977 11724977 wed may 25 16:37:17 cst 2011 database psu 10.2.0.4.8 (requires pre-requisite
8576156 9352164 wed may 25 15:10:48 cst 2011 database psu 10.2.0.4.1 (includes cpujul2009)
8833280 9352164 wed may 25 15:10:48 cst 2011 database psu 10.2.0.4.2 (includes cpuoct2009)
9119284 9352164 wed may 25 15:10:48 cst 2011 database psu 10.2.0.4.3 (includes cpujan2010)
9352164 9352164 wed may 25 15:10:48 cst 2011 database psu 10.2.0.4.4 (includes cpuapr2010)
另外的方法是查看registry$history表。
sql> select action,comments from registry$history;
action comments
------------------------------- --------------------
apply psu 10.2.0.4.4
apply psu 10.2.0.4.8
cpu view recompilation
注意:该表的内容是在上述安装psu步骤的第三步中运行catbundle.sql才会插入的,因此如果该步骤忘记执行,则此表中无记录。因此我们在作数据库健康检查的时候不但要用opatch检查当前数据库最新的psu补丁,也要检查registry$history表,以确认其它dba是否正确地完成了psu的安装。
如果多个psu的安装都忘记了执行上述第三步,可以通过以下方法依次补作。
$ ls -l $oracle_home/psu
total 0
drwxrwxrwx 2 oracle dba 96 oct 16 2010 10.2.0.4.4
drwxrwxrwx 2 oracle dba 96 oct 16 2010 10.2.0.4.5
$sqlplus / as sysdba
sql> @?/psu/10.2.0.4.4/catpsu.sql
sql> @?/psu/10.2.0.4.5/catopsu.sql
更多关于cpu的信息,可以参看:maclean的了解oracle critical patch update。
5. 参考文档。
oracle recommended patches — oracle database [id 756671.1]
patch set updates for oracle products [id 854428.1]
introduction to oracle database catbundle.sql [id 605795.1]
how to confirm that a critical patch update (cpu) has been installed in linux / unix [id 821263.1]
.syntaxhighlighter{padding-top:20px;padding-bottom:20px;}【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!