在后期打patch时常见的一个错误是:
Prerequisite check "CheckActiveFilesAndExecutables" failed.
如果在服务端有相关的进程在运行,从而占用可执行文件或运行库,会导致升级时无法更新相应的文件,从而升级失败,报出如上错误。
一般是很容易通过fuser、lsof查出相关的进程的,但有一个情形是无法查出来,只能用fuser查看指定的运行库如libclntsh.so来确定是否占用运行库,如下例。
/u01/app/oracle/product/12.2.0/db_1/OPatch/opatchauto apply /u01/soft/patch/31305339 -oh /u01/app/oracle/product/12.2.0/db_1
报如上错误后,常规手段竟然查不出相关的进程!执行如下:
fuser /u01/app/oracle/product/12.2.0/db_1/lib/libclntsh.so /u01/app/oracle/product/12.2.0/db_1/lib/libclntsh.so.19.1: 28318m [root@rac2:1 /u01/app/oracle/product/12.2.0/db_1/lib]# ps -ef|grep 28318 root 24701 17001 0 10:06 pts/1 00:00:00 grep --color=auto 28318 oracle 28318 28187 0 Jul16 pts/0 00:00:11 sqlplus as sysdba
可见有一个sqlplus客户端在使用运行库文件!
杀掉这个进程,resume即可:
/u01/app/oracle/product/12.2.0/db_1/OPatch/opatchauto resume
文章评论