补丁说明

Oracle数据库补丁一般分为两种,CPU和PSU。

  • CPU
CPU的全称是Critical Patch Update,Oracle对于其产品每个季度发行一次安全补丁包,通常是为了修复产品中的安全隐患。CPU
是累积的,即最新的CPU补丁已经包含以往的CPU补丁,所以只要安装最新的CPU补丁即可。
  • PSU
PSU全称是Patch Set Update,Oracle对于其产品每个季度发行一次的补丁包,包含了bug的修复。Oracle选取被用户下载数量多,且被验证过具有较低风险的补丁放入到每个季度的PSU中。在每个PSU中不但包含bug的修复而且还包含了最新的CPU。PSU通常随
CPU一起发布。PSU通常也是增量的,大部分可以直接安装,但有些PSU则必须安装了上一个版本的PSU之后才能继续安装,要仔细查看各个PSU的Readme文档。

补丁文件

  • OPatch:p6880880_112000_Linux-x86-64.zip
  • Database PSU:p31537677_112040_Linux-x86-64.zip

安装步骤

  1. 下载补丁及OPatch工具;
  2. 上传补丁相关文件到服务器;
  3. 停止所有数据库服务、业务系统;
  4. 备份Oracle软件(备份ORACLE_HOME目录),生产环境已有数据的,建议做一次数据全备;
  5. 替换原来的OPatch工具;
  6. 安装补丁;(根据补丁说明文档进行安装,一般先在测试环境安装,没问题之后再安装到生产)
  7. 检查补丁安装情况;
  8. 启动数据库服务;
  9. 测试应用。

备份Oracle软件

在应用补丁集或补丁之前,一般都建议备份ORACLE_HOME二进制文件以及Central Inventory(oraInventory)文件。备份必须由Oracle安装用户或root用户进行,以确保正确保留文件的所有权/权限。在备份之前,一般建议关闭数据库服务、监听器以及所有数据库进程,确保Oracle Home软件冷备顺利进行。

1. 进入ORACLE_HOME所在目录:
[yaya@yaya ~]$ cd $ORACLE_HOME
[yaya@yaya db_1]$ pwd
/opt/app/oracle/product/11.2.0/db_1
[yaya@yaya db_1]$ cd ..
[yaya@yaya 11.2.0]$

2. 备份ORACLE_HOME:
[yaya@yaya 11.2.0]$ tar -pcvf /opt/app/oracle/backup/db_1_bak.tar db_1

3. 备份Central Inventory也应该是备份计划的一部分,并与Oracle_Home备份同时进行,以保持一致性。

4. 一般在/var/opt/oracle/oraInst.loc 或 /etc/oraInst.loc文件中可以查看Central Inventory的位置:
[yaya@yaya etc]$ cat oraInst.loc 
inventory_loc=/opt/app/oracle/inventory
inst_group=oinstall

OPatch安装

查看当期OPatch工具版本:

opatch version

上传 使用root用户

OPatch:p6880880_112000_Linux-x86-64.zip
Database PSU:p31537677_112040_Linux-x86-64.zip

unzip p6880880_112000_Linux-x86-64.zip
chown -R oracle:oinstall OPatch

备份
cd /oracle/u01/app/oracle/product/11/dbhome_1
mv OPatch/ OPatchBak/
mv /oracle/u01/app/OPatch/ ./

PSU补丁安装

unzip p31537677_112040_Linux-x86-64.zip
chown -R oracle:oinstall 31537677

检查补丁兼容性:

cd 31537677
opatch prereq CheckConflictAgainstOHWithDetail -ph ./

安装补丁(Oracle Home):

创建交互文件

$ORACLE_HOME/OPatch/ocm/bin/emocmrsp  -no_banner -output /oracle/u01/app/oracle/file.rsp
$ORACLE_HOME/OPatch/opatch apply -silent -ocmrf /oracle/u01/app/oracle/file.rsp

cd $ORACLE_HOME/rdbms/admin
sqlplus / as sysdba
startup
@catbundle.sql psu apply

检查补丁安装情况:

set line 150
set pagesize 99
col action_time for a30
col action for a30
col comments for a90
col object_name for a30
col object_type for a30
col comp_name for a50
col comp_id for a20


1. 查看实例信息及状态:
select instance_name,status from v$instance;
2. 查看数据库版本:
select * from v$version;
3. 查看数据库大小:
select sum(bytes)/1024/1024||'M' from dba_segments;
4. 查看组件信息:
select COMP_ID,COMP_NAME,VERSION,STATUS from DBA_REGISTRY;
5. 查看补丁情况:
select ACTION_TIME, ACTION, COMMENTS from DBA_REGISTRY_HISTORY;
6. 查看无效对象:
select owner,object_name,object_type,status from dba_objects where status<>'VALID';
select count(*) from dba_objects where status<>'VALID';