Oracle Database PSU/CPU

1. 什么是PSU/CPU?
CPU: Critical Patch Update
Oracle对于其产品每一个季度发行一次的安全补丁包,一般是为了修复产品中的安全隐患。html

PSU: Patch Set Updates
Oracle对于其产品每一个季度发行一次的补丁包,包含了bug的修复。Oracle选取被用户下载数量多的,而且被验证过具备较低风险的补丁放入到每一个季度的PSU中。在每一个PSU中不但包含Bug的修复并且还包含了最新的CPU。sql

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中均可以找到,因此请仔细阅读该文档。oracle

一般安装PSU是比较简单的,步骤以下:
1) 安装PSU须要使用到opatch,在README.html中有描述该PSU须要的最低版本opatch,若是当前opatch版本太低,则须要先下载 Patch 6880880,该Patch中包含最新的opatch,只须要解压覆盖原先的$ORACLE_HOME/OPatch目录便可。app

查看当前的opatch版本,可使用opatch version命令。ide

$ opatch versionspa

Invoking OPatch 10.2.0.5.2  
orm

OPatch Version: 10.2.0.5.2   
htm

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]

相关文章
相关标签/搜索