1. 下载补丁和最新OPatch,GIPSU,PSU补丁
OPatch下载地址:
https://updates.oracle.com/download/6880880.html
GI-PSU:
Oracle-psu:
Oracle-CPU
2. 检查数据库当前OPatch版本
RAC所有节点的GI home和DB home都需要检查。
$ $ORACLE_HOME/OPatch/opatch version
3. 更新OPatch
3.1 RAC所有节点的GI home和DB home都需要更新。
$ mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch_bak
$ unzip p6880880_112000_Linux-x86-64.zip -d $ORACLE_HOME
$ $ORACLE_HOME/OPatch/opatch version
3.2 需要注意grid用户$ORACLE_HOME 权限。
# su - grid
$ echo $ORACLE_HOME
$ ls -lh $ORACLE_HOME/../
$ exit
# chmod 775 /oracle/app/11.2.0/grid/bin
4. 解压GIPSU补丁文件
# su – grid
$ unzip p27967757_112040_Linux-x86-64-gipsu.zip
5. 检查补丁之间有无冲突
5.1 检查需要打的补丁与现有补丁有无冲突.
Oracle 用户执行:
$ cd 27734982
$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
grid用户执行结果:
$ cd 27967757
$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
6. 停止数据库和本地crs服务
登录节点1
# su – oracle
$ $ORACLE_HOME/bin/srvctl stop instance -d orcl -i orcl2
su – root
进入GRID_HOME下crs/install目录
# $ORACLE_HOME/crs/install/rootcrs.pl –unlock
7. 更新补丁
7.1 手工打补丁
7.1.1 更新GRID-PSU
$ $ORACLE_HOME/OPatch/opatch napply -oh $ORACLE_HOME -local /home/grid/28429134
输出略…
7.1.2 报错解决方法
- 执行到最后会报错 如下信息:
chmod: changing permissions of :'/u01/app/11.2.0/grid/bin/extjobO' Operation not permissions |
报错原因: 是因为执行过程中extjob0的文件所属组会自动变为root oinstall.
解决方法:
1)回退GRID-PSU补丁
$ cd $ORACLE_HOME/Opatch
$ ./opatch rollback -id 27967757
2)重新授权
chown -R grid:oinstall /u01/app/11.2.0/grid/bin/extjobO
3)重新执行补丁升级
$ORACLE_HOME/OPatch/opatch napply -oh $GRID_HOME -local /home/grid/27967757/
7.1.3 更新Oracle PSU补丁
1)注意事项
Oracle 用户升级前先检查服务是否完全停止,
否则执行过程中也会报关于lib库连接的错误
# fuser /oracle/app/oracle/product/11.2.0/db_1/lib/libclntsh.so.11.1
# lsof /oracle/app/oracle/product/11.2.0/db_1/lib/libclntsh.so.11.1
# kill -9 进程号
2)确认无误后进行补丁升级
$ORACLE_HOME/OPatch/opatch napply -oh $ORACLE_HOME -local /home/oracle/28204707
输出略..
7.1.4 报错解决方法
- 执行到最后如果报错 如下信息:
报错原因: 是因为执行过程中extjob0的文件所属组会自动变为root oinstall.
解决方法:
1)回退ORACLE-PSU补丁
$ cd $ORACLE_HOME/Opatch
$ ./opatch rollback -id 27734982
2)重新授权
chown -R oracle:oinstall /oracle/app/oracle/product/11.2.0/db_1/bin/extjobO
3)重新执行补丁升级
$ORACLE_HOME/OPatch/opatch napply -oh $ORACLE_HOME -local /home/oracle/27734982
7.2.3 启动集群
$ su – root
# /u01/app/11.2.0/grid/rdbms/install/rootadd_rdbms.sh
# /u01/app/11.2.0/grid/crs/install/rootcrs.pl -patch
7.2 在节点2重复以上节点1操作
8. 登录数据库执行升级字典操作
由于RAC实际只有一个数据库,因此任意节点登录数据库执行1次即可。最后重启数据库。
$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> STARTUP
SQL> @catbundle.sql psu apply
SQL> QUIT
$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> @utlrp.sql
SQL> shutdown immediate;
SQL> startup;
9. 验证补丁更新结果
各节点的GI HOME和ORACLE HOME都执行验证。
$ cd $ORACLE_HOME/OPatch
$ ./opatch lsinventory
数据库的验证。
SQL> select * from dba_registry_history;
10. 升级CPU安全补丁
以下操作都由Oracle用户执行
10.1. 解压Oracle CPU补丁
unzip p28317183_112040_Linux-x86-64-cpu.zip
10.2. 升级CUP 补丁
$ cd /home/oracle/28317183/27923163
$ $ORACLE_HOME/OPatch/opatch napply -oh $ORACLE_HOME -local /home/oracle/28364007
升级完成后重启当前节点数据库
$ srvctl stop instance –d orcl –i orcl1
10.3. 节点二 执行上述同样的动作
10.4. 更新数据字典
脚本只需要在一个节点上执行,但需要将数据库定义为单机模式。
$cd /home/oracle/28317183/27923163
SQL> SQLPLUS / AS SYSDBA
SQL> alter system set cluster_database=false scope=spfile;
SQL> SHUTDOWN
SQL> STARTUP UPGRADE
SQL> @postinstall.sql
SQL> alter system set cluster_database=true scope=spfile;
SQL> SHUTDOWN
SQL> STARTUP
@?/rdbms/admin/catbundle.sql cpu apply
11.升级OJVM 虚拟组件补丁
以下操作都由Oracle用户执行
11.1 解压OJVM补丁
$ unzip p28440700_112040_Linux-x86-64-OJVM.zip
11.2 升级OJVM补丁
$ cd /home/oracle/28440700
$ $ORACLE_HOME/OPatch/opatch napply -oh $ORACLE_HOME -local /home/oracle/28440700
11.3 节点二 执行上述同样的动作
11.4 更新数据字典
脚本只需要在一个节点上执行,但需要将数据库定义为单机模式。
cd /home/oracle/28440700
sqlplus /nolog
SQL> CONNECT / AS SYSDBA
SQL> STARTUP
SQL> alter system set cluster_database=false scope=spfile;
SQL> SHUTDOWN
SQL> STARTUP UPGRADE
SQL> @postinstall.sql
SQL> alter system set cluster_database=true scope=spfile;
SQL> SHUTDOWN
$srvctl start database –d orcl