ITPub博客

首页 > 数据库 > Oracle > 打补丁PSU

打补丁PSU

原创 Oracle 作者:燕鑫 时间:2018-05-06 21:43:29 0 删除 编辑
首先说一下下载补丁和最新opatch的方法:
都再mos上:


下载补丁:直接搜索2118136.2,这是文档id



下载optach:点击补丁程序和更新程序标签,然后搜索6880880




接下来我们说下常用到的PSU:

我们这里之说linux的,主要有DB,GI+DB,GI+DB+OJVM

然后我们来说补丁安装:

其实,就是在这里翻译一下readme.html,这里主要介绍一下GI+DB(+OJVM)
OJVM记住一点就好,要单独用oracle用去打,并且,这个是不支持rolling upgrade的,也就是说,集群必须都得停。
然后说GI+DB:
首先,不管咋说,都要先查看opatch的版本
grid用户跟oracle用户都要查,在各自的$ORACLE_HOME/OPatch/下:
./opatch version
然后用这个version,比对readme里面要求的该补丁至少需要啥版本的opatch。要我说,直接那最新的opatch升了就对了,升级opatch的方法:
下载对应系统版本的OPatch,然后在grid和oracle用户下都要执行,因为各是各的Opatch工具:
unzip 压缩包 -d $ORACLE_HOME
然后选择全部覆盖,就是输入一个A就ok了
然后要生成一个rsp文件,反正就grid下生成嘛:(12.2.0.1.5以上版本就不用了)

$ORACLE_HOME/OPatch/ocm/bin/emocmrsp -no_banner -output /opt/ocm.rsp
反正就是这个rsp不管放哪儿,必须保证oracle用户和grid用户都能访问的到,后面说为啥
然后一切准备就绪,root用建个空目录,一定得是个空目录,比如:
mkdir /GI
然后把压缩包拷到这个目录下,给个777权限:
chmod 777 -R /GI
然后用grid用户解压补丁包就解压在这个路径下:
su - grid
cd /GI
unzip 补丁包
一般来说,grid home和oracle home都不是share的,如果有acfs,不管咋说,都得先umount,然后我们就用opatch auto直接打,这里我们用rolling upgrade的方式,就是一个节点一个节点的打,不用停业务。
按文档的方法是,咋说也得先把em停了,
然后以root用户的身份执行:
grid的$ORACLE_HOME/OPatch/opatch auto /GI/GI+DB的目录  -ocmrf /opt/ocm.rsp
完事儿以后在grid用户下,oracle用户下,分别执行:
$ORACLE_HOME/OPatch/opatch lspatches
看看补丁打上没,然后所有节点执行完事儿。
然后在一个节点上执行脚本:
@?/rdbms/amdin/catbundle.sql psu apply
@?/rdbms/admin/utlrp.sql(这个主要时为了重新编译一些java相关的失效的对象)(有时间执行,没时间就算)
然后查一下dba_registry_history,有新的补丁记录就对了,完事儿。

现在解释一下readme中的这个opatch auto:

首先你如果你没有建那个空目录的话,系统就要问你到底是解没解压到一个空目录啊,你确认俩次,因为它是要自己检索每个目录,然后对应的打补丁。
然后,它会把em停,数据库实例停了,asm实例停了,节点停了
接着,它会用grid的用户指定oh=grid_home给GI打补丁,再用oracle用户指定oh=oracle_home给DB打补丁,其中还要以root身份执行对集群操作的脚本,所以这就是为什么:
一定要用root执行打补丁!一定要把ocm.rsp文件放在grid和oracle都能访问的路径!(oracle用户是访问不到/home/grid/下的)
打完补丁,然后把集群起起来,数据库也起起来,em也起起来。
所以说白了,要按readme的方式来,啥都不用停,把acfs umount了就可以。


但是为了保险,避免诸多不可预见的问题,建议如下做:
在要打补丁的节点上,停em,停数据库实例,
sqlplus / as sysdba
shutdown immediate
exit
grid的$ORACLE_HOME/OPatch/opatch auto /GI/GI+DB的目录 -oh grid_home的路径展开(就是意思别直接写$ORACLE_HOME) -ocmrf /opt/ocm.rsp
oracle的$ORACLE_HOME/OPatch/opatch auto /GI/GI+DB的目录 -oh oracle_home的路径展开(就是意思别直接写$ORACLE_HOME) -ocmrf /opt/ocm.rsp

然后lspatches检查,
然后起数据库实例,再到下一个节点停数据库实例

所有节点都打完补丁,再在一个节点上执行脚本,把补丁注册到数据库中。


说一下遇到过的问题,这里持续更新:

grid_home/cfgtoolslogs下面的日志文件,就是你打补丁的时候,最开始会告诉你俩个日志文件,文件名是有时间戳的,一个日志详细记录后台的变化,一个日志是真实执行的每一步操作(大约25步左右)
可以在打补丁的时候,新开一个窗口,tail -200f 有详细记录的日志,可以看到出错时因为啥:
目前遇到俩个:
1.有文件正在使用,解决办法都是一个思路,就时杀占用文件的进程:
linux下:日志中找到acitve的文件,然后用fuser 文件名查出使用文件的进程,kill -9
windows下:找到路径下正在被占用的文件,右键剪切,到一个新地方粘贴,看报错,报什么就停什么。
2.日志中出现,没有找到rsp文件:
rsp文件没有放在oracle用户和grid用户都可访问的路径下。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31532509/viewspace-2153878/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-04-17

  • 博文量
    6
  • 访问量
    3771