Oracle数据库Opatch补丁操作流程

一、 升级前准备工作

1、 确认数据库版本

使用dba登陆查询当前数据库的版本

SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE 10.2.0.5.0 Production
TNS for 64-bit Windows: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 – Production

 

2、 查询补丁安装信息

SQL> select * from dba_registry_history;

没有任何记录一般是未安装补丁,也可以在环境设置以后用opatch lsinventory opatch 命令查询当前补丁安装情况。

3、 查询数据库失效对象个数,这个数字记下来记为N1

SQL> SELECT sum(OBJECT_NAME)N1 FROM DBA_OBJECTS WHERE STATUS= 'INVALID';

如果存在失效对象最好先编译一遍

Sql >@?/rdbms/admin/utlrp.sql

编译完成后重新执行下下面语句,查看当前的实效对象记为N2

SQL> SELECT sum(OBJECT_NAME)N2 FROM DBA_OBJECTS WHERE STATUS= 'INVALID';
SQL> SELECT OBJECT_NAME FROM DBA_OBJECTS WHERE STATUS= 'INVALID';--将该结果存入excel或者表中,便于补丁完后进行核对。

4、 补丁类型

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

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

Oracle CPU的全称是Critical Patch Update, Oracle对于其产品每个季度发行一次安全补丁包,通常是为了修复产品中的安全隐患。CPU是累积的(Cumulative),即最新的CPU补丁已经包含以往的CPU补丁,所以只要安装最新的CPU补丁即可。

安全漏洞整改时我们要安装的是CPU补丁。

注意:

CPU,是Critical Patch Update的缩写,意为紧急补丁更新。每季度发布一次,是用来修复安全方面的一些补丁,是累积型的。自2012年10月已经更名为Security Patch Update (SPU)

PSU,是Patch Set Update的缩写,意为补丁集更新。Oracle 选取在每个季度用户下载数量最多,并且得到验证具有较低风险的补丁放入到每个季度的PSU中,修复比较严重的一些问题,包含每个季度的CPU,是累积型的。

Interim Patch/One-Off Patch,是我们常说的小补丁,为了修复某(几)个Bug而发布的补丁。这种补丁推荐在测试库上测试无误后再安装在生产库上。

以上三类补丁,除PSU外,安装时要使用OPatch来安装补丁。而PSU则可以直接安装。

BP在Windows平台上的Oracle没有小补丁,只有称为Bundle Patch的补丁集。 这种累积型的补丁集会周期性的发布(至少每季度一次),也就是每个Bundle Patch会包含之前所有的Bundle Patch。比如Windows Bundle Patch 16,它会包含之前所有15个Bundle Patch,所以我们总是推荐安装最新的Bundle Patch。Oracle的集群软件和数据库软件的Window Bundle Patch是同一个,比如Windows Bundle Patch 16(补丁号16167942,既可以打在集群上,也可以打在数据库上) 。

5、 查询补丁信息

登陆oracle官网安全专题 http://www.oracle.com/technetwork/topics/security点击learn More,找到Critical Path Update Advisory

5A1956A6-7A48-9F14-93BE-815243A1F32D.png

打开以后可以看到oracle发布的补丁的列表,里面包含了oracle产品发布的补丁。

BF880FFC-6B60-C315-980E-151F96AECA8B.png

6、 补丁下载

例如我们当前的oracle的版本为10.2.0.5,该版本的最后更新补丁为2013年 7月份,点击上图红色链接后可以看到10.2.0.5的数据库补丁。

DC6D771A-73D8-AA4A-E63C-DE1ECBA3BAD4.png

注:下载使用metalink的账号,依照服务器的类型下载相应版本的补丁即可。如果没有oracle 的metalink账号无法下载补丁。

7、 数据库备份工作

在补丁升级前做好数据库的备份工作,使用rman或者导出数据文件方式进行数据库的全备。条件允许的情况下操作系统最好也进行一次备份。

所有以上操作做完后我们可以进行补丁安装工作了。

二、 补丁安装操作

1、 阅读补丁安装要求

每个补丁下载后的压缩包均会包含一份README.html 在安装前需要仔细阅读。一般会标明该补丁适用的数据库版本和操作系统版本,修复了哪些BUG等,还会有相关的提示信息,有两点需要特别注意。

一是OPatch的版本,你可以通过opatchversion命令查看Oracle Home当前的OPatch版本,如果低于Readme规定的最低版本,一定要先升级OPatch才能打补丁。Opatch工具升级较简单,见2.4小节。

二是打Patch步骤:基本上所有的CPU都大同小异,具体如本案所示。PSU有时会有前置补丁要求,安装步骤大同小异这里不赘述。

4503A278-E290-7B58-C1B9-C401877F1A12.png

2、 环境设置

2.1、Windows环境下

进入计算机属性→高级系统设置→系统属性→环境变量

D91194DD-FFAE-13F8-F972-5436DFFD503F.png

C787ECCF-3C78-61B1-3F27-A1B8AFDFFC32.png

编辑path在path末尾加上%ORACLE_HOME%\OPatch或者在cmd 下set path=%path%;%ORACLE_HOME%\OPatch; 2.2、Linux下的环境变量设置

使用oracle 安装用户,设置ORACLE_HOME以后export PATH=$ORACLE_HOME/OPatch:$PATH。 2.3、OPATCH命令测试

环境变量设置成功后测试OPatch命令是否可用,终端下opatch –help,可以看到相关信息表示环境变量设置成功。

404D5097-04EA-8699-61F3-2A7D8355828B.png

2.4 OPATCH升级

在补丁安装的时候有时会提示OPatch failed with error code 73错误,此时有可能是opatch版本过低导致,此时需要从oracle官网https://updates.oracle.com/download/6880880.html下载OPatch工具。下载同样需要使用metalink账号。下载对应版本的OPATCH完解压后,在ORACLE_HOME下把以前的opatch文件夹重命名,将解压的OPATCH复制过去即可。可以使用命令opatch version查询当前opatch的版本。

3、 查询补丁安装信息

操作系统下查看当前补丁安装情况opatch lsinventory –patch

7B023096-96BD-E456-C93D-EFB4C6870066.png

4、 停掉监听和oracle服务

4.1、Windows下关闭服务

在服务里关闭Oracle相关服务进程,停掉监听和oracle服务。关闭PLSQL客户端,关闭SQLPLUS界面。

4.2、Linux下关闭服务

shutdown 掉所有实例,关闭监听和oracle 相关进程。如果有安装GI和其他使用Oracle 的应用一并停止,退出SQLPLUS界面。

5、 安装补丁

在补丁目录下执行opatch apply。例如我的补丁解压在E:\13460968,那就先CD到该目录,然后执行opatch apply

注意:windows下有时候会出现所有oracle进程关闭,但是命令执行后依然会出现D:\oracle\product\10.2.0\db_1\bin\oci.dll 占用的错误。

linux下出现进程占用时一般是sqlplus 进程未关闭,可以用fuser查询是什么用户占用,但是强制kill时候数据库启动的时候可能会报错。

624CDF87-1D3A-0A4A-CEAC-5C922F871E37.png

去到该目录找到该文件改名,例如改成oci.dllbak,如果执行过补丁回退操作记得改回来,重新执行opatch apply。

FBAF8A37-BB68-0046-31C3-506FB85F65EF.png

选择y,下一步等待补丁安装完毕即可。

23418DAB-4385-E8A1-EB20-E9BE6546C32B.png

6E6D3788-FCDE-E44D-A308-FCB17FE6D670.png

6、 启动数据库

Windows先在服务中启动oracle的服务和监听。以sysdba登陆系统。

Linux 下正常启动oracle实例和监听。以sysdba登陆系统。

7、 执行脚本,更新补丁信息到数据库

执行补丁包中的目录下的脚本,等待脚本运行完毕即可。Linux找到补丁目录执行即可。

sql>@E:\13460968\files\Bundle\Patch14\catcpu.sql

注意:不同补丁集位置可能有所不同,但一般都是有该脚本。

8E719EEA-31FD-E8BE-EC82-396DC26085D3.png

8、 编译失效对象,执行以下语句

Sql >@?/rdbms/admin/utlrp.sql

3EED481B-4E31-F967-4752-51CB9CCA9713.png

205C889D-957E-E592-2279-7E0B393ADC13.png

注意:大部分失效对象错误是可以忽略的,具体类型可以用如下命令去检查。

SQL> SELECT sum (OBJECT_NAME)N3 FROM DBA_OBJECTS WHERE STATUS='INVALID';

查看N3和第一张第3节的N2比对下,看是否新增失效对象,如果有查看具体的失效对象是什么,利用第一章节3小节得到的列表比对,如果不能处理咨询数据库管理员处理。

9、 查询补丁更新的信息

select * from dba_registry_history;

EBD091FA-71B0-7655-F62B-8B4A414E4489.png

可以查看到刚刚安装的补丁的相关信息。(这里我安装了一次,卸载了一次,最后是刚刚安装成功的信息都记录到了数据库)。命令行下执行Opatch lsinventory opatch

93BF47D9-E97E-8905-9A72-CC08B41E0D60.png

整个安装流程结束,数据库正常。

三、 回滚操作

一般情况下在不确定问题原因的情况下咨询DBA进行检查,确定问题原因,在无法查证原因的情况下可以回退,具体的回滚操作命令如下。

1、如果补丁应用后数据库异常或者发生BUG,可以利用Opatch回滚补丁更新的操作。

2、关闭oracle相关服务,参照第二节2小节设置环境变量,执行如下命令,红色部分为安装补丁的ID。

opatch rollback -id 13460968

3、执行完毕后 启动oracle相关服务,windows记得恢复重命名的dll文件。

4、查询数据库是否可以正常启动。

5、回滚完毕以后使用sysdba用户执行roolback脚本

Sql>@E:\13460968\files\Bundle\Patch14\ catcpu_rollback.sql

6、检查数据库是否正常。

注意:数据库补丁升级工作需要停应用和相关服务,在升级前一定要进行数据库的备份工作。

收藏 (0)
评论列表
正在载入评论列表...
我是有底线的