Oracle Patchエラー報告Prerequisite check"CheckActiveFilesAndExecutables"failed.


夜、いくつかのテストライブラリにパッチを適用し、リスニングとインスタンスを停止した後、Oracleのプロセスがないことを確認し、opatch applyを実行します.しかし、実行は次のエラーを報告します.
$ opatch apply
Oracle Interim Patch Installer version 11.2.0.3.12
Copyright (c) 2017, Oracle Corporation.  All rights reserved.


Oracle Home       : /opt/oracle/app/oracle/product/11.2.4/db_1
Central Inventory : /opt/oracle/app/oracle/oraInventory
   from           : /opt/oracle/app/oracle/product/11.2.4/db_1/oraInst.loc
OPatch version    : 11.2.0.3.12
OUI version       : 11.2.0.4.0
Log file location : /opt/oracle/app/oracle/product/11.2.4/db_1/cfgtoollogs/opatch/opatch2017-03-29_00-16-10AM_1.log

Verifying environment and performing prerequisite checks...
Prerequisite check "CheckActiveFilesAndExecutables" failed.
The details are:


Following executables are active :
/opt/oracle/app/oracle/product/11.2.4/db_1/lib/libclntsh.so.11.1
UtilSession failed: Prerequisite check "CheckActiveFilesAndExecutables" failed.
Log file location: /opt/oracle/app/oracle/product/11.2.4/db_1/cfgtoollogs/opatch/opatch2017-03-29_00-16-10AM_1.log

Oracleの関連プロセスはもうありません
[bbtst3s oracle@tst3 /home/oracle]
$ ps -ef |grep ora
  oracle  8608  8606  0 02:04:59 ?         0:00 sshd: oracle@pts/2
  oracle  8796 19274  0 02:05:24 ?         0:00 sleep 15
  oracle 19274     1  3  Dec 20  ?        967:38 /bin/sh ./OSWatcher.sh 15 192
  oracle  8825  8610  0 02:05:35 pts/2     0:00 grep ora
  oracle  8668 19319  0 02:05:03 ?         0:00 sleep 60
  oracle  8824  8610  2 02:05:35 pts/2     0:00 ps -ef
  oracle  8610  8608  0 02:04:59 pts/2     0:00 -ksh
  oracle 19319 19274  0  Dec 20  ?        23:31 /bin/sh ./OSWatcherFM.sh 192 /opt/bboss/tst3/oracle/arch/oswatcher/oswbb/archive
    root  8606 21662  0 02:04:56 ?         0:00 sshd: oracle [priv]

するとfuserで表示
$ fuser /opt/oracle/app/oracle/product/11.2.4/db_1/lib/libclntsh.so.11.1
/opt/oracle/app/oracle/product/11.2.4/db_1/lib/libclntsh.so.11.1:    29888m

ファイルが確かに占有されているのを見て、しかしどのプロセスに占有されているのか分からないで、更にlsofコマンドを使います
$ ./lsof /opt/oracle/app/oracle/product/11.2.4/db_1/lib/libclntsh.so.11.1

実行が終わっても結果が出ないので、調べることができません.
そこで同僚に教えてもらった.彼はrootユーザーを使ってlsofコマンドを実行し、最上位層のディレクトリにしか指定して調べなかった.
# lsof /opt 
COMMAND     PID     USER   FD   TYPE DEVICE  SIZE/OFF   NODE NAME
RaterServ 29888    rate3  mem    REG 64,0x6  10800648  85874 /opt/oracle/app/oracle/product/11.2.4/db_1/lib/libnnz11.so
RaterServ 29888    rate3  mem    REG 64,0x6 121875400 324102 /opt/oracle/app/oracle/product/11.2.4/db_1/lib/libclntsh.so.11.1

上記の出力結果から、プロセスが占有されていることがわかります.プロセス番号は29888です.
プロセス名を29888ペアで調べます
# ps -ef |grep 29888
アプリケーションのサービスを見つけて、テストとコミュニケーションした後、このプロセスは直接killすることができます.
kill -9 29888
opatch applyの再実行に成功しました.