Oracle数据库补丁一般分为两种,CPU和PSU。
- CPU的全称是Critical Patch Update,Oracle对于其产品每个季度发行一次安全补丁包,通常是为了修复产品中的安全隐患。CPU
- 是累积的,即最新的CPU补丁已经包含以往的CPU补丁,所以只要安装最新的CPU补丁即可。
- PSU全称是Patch Set Update,Oracle对于其产品每个季度发行一次的补丁包,包含了bug的修复。Oracle选取被用户下载数量多,且被验证过具有较低风险的补丁放入到每个季度的PSU中。在每个PSU中不但包含bug的修复而且还包含了最新的CPU。PSU通常随
- CPU一起发布。PSU通常也是增量的,大部分可以直接安装,但有些PSU则必须安装了上一个版本的PSU之后才能继续安装,要仔细查看各个PSU的Readme文档。
在应用补丁集或补丁之前,一般都建议备份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 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/ ./
- unzip p31537677_112040_Linux-x86-64.zip
- chown -R oracle:oinstall 31537677
检查补丁兼容性:
- cd 31537677
- opatch prereq CheckConflictAgainstOHWithDetail -ph ./
- 创建交互文件
-
- $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';