一、 升级前准备工作
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补丁。
5、 查询补丁信息
登陆oracle官网安全专题http://www.oracle.com/technetwork/topics/security点击learn more,找到critical path update advisory
打开以后可以看到oracle发布的补丁的列表,里面包含了oracle产品发布的补丁。
6、 补丁下载
例如我们当前的oracle的版本为10.2.0.5,该版本的最后更新补丁为2013年 7月份,点击上图红色链接后可以看到10.2.0.5的数据库补丁。
注:下载使用metalink的账号,依照服务器的类型下载相应版本的补丁即可。如果没有oracle 的metalink账号无法下载补丁。
7、 数据库备份工作
在补丁升级前做好数据库的备份工作,使用rman或者导出数据文件方式进行数据库的全备。条件允许的情况下操作系统最好也进行一次备份。
所有以上操作做完后我们可以进行补丁安装工作了。
二、 补丁安装操作
1、 阅读补丁安装要求
每个补丁下载后的压缩包均会包含一份readme.html 在安装前需要仔细阅读。一般会标明该补丁适用的数据库版本和操作系统版本,修复了哪些bug等,还会有相关的提示信息。
2、 环境设置
2.1、windows环境下
进入计算机属性→高级系统设置→系统属性→环境变量
编辑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,可以看到相关信息表示环境变量设置成功。
3、 查询补丁安装信息
操作系统下查看当前补丁安装情况opatch lsinventory –patch
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时候数据库启动的时候可能会报错。
去到该目录找到该文件改名,例如改成oci.dllbak,如果执行过补丁回退操作记得改回来,重新执行opatch apply。
选择y,下一步等待补丁安装完毕即可。
6、 启动数据库
windows先在服务中启动oracle的服务和监听。以sysdba登陆系统。
linux 下正常启动oracle实例和监听。以sysdba登陆系统。
7、 执行脚本,更新补丁信息到数据库
执行补丁包中的目录下的脚本,等待脚本运行完毕即可。linux找到补丁目录执行即可。
sql>@e:460968\files\bundle\patch14\catcpu.sql
注意:不同补丁集位置可能有所不同,但一般都是有该脚本。
8、 编译失效对象,执行以下语句
sql >@?/rdbms/admin/utlrp.sql
注意:大部分失效对象错误是可以忽略的,具体类型可以用如下命令去检查。
sql> select sum (object_name)n3 from dba_objects where status='invalid';
查看n3和第一张第3节的n2比对下,看是否新增失效对象,如果有查看具体的失效对象是什么,利用第一章节3小节得到的列表比对,如果不能处理咨询数据库管理员处理。
9、 查询补丁更新的信息
select * from dba_registry_history;
可以查看到刚刚安装的补丁的相关信息。(这里我安装了一次,卸载了一次,最后是刚刚安装成功的信息都记录到了数据库)。命令行下执行opatch lsinventory opatch
整个安装流程结束,数据库正常。
三、 回滚操作
一般情况下在不确定问题原因的情况下咨询dba进行检查,确定问题原因,在无法查证原因的情况下可以回退,具体的回滚操作命令如下。
1、如果补丁应用后数据库异常或者发生bug,可以利用opatch回滚补丁更新的操作。
2、关闭oracle相关服务,参照第二节2小节设置环境变量,执行如下命令,红色部分为安装补丁的id。
opatch rollback -id 13460968
3、执行完毕后 启动oracle相关服务,windows记得恢复重命名的dll文件。
4、查询数据库是否可以正常启动。
5、回滚完毕以后使用sysdba用户执行roolback脚本
sql>@e:460968\files\bundle\patch14\ catcpu_rollback.sql
6、检查数据库是否正常。
注意:数据库补丁升级工作需要停应用和相关服务,在升级前一定要进行数据库的备份工作。
以上所述是www.887551.com给大家介绍的oracle数据库opatch补丁操作流程,希望对大家有所帮助