1、现象:
报错日志显示有文件被使用会导致 opatchauto 执行失败:
[Dec 26, 2023 4:17:26 PM] [INFO] Following active files/executables/libs are used by ORACLE_HOME :/home/db/grid/product/19.3.0
/home/db/grid/product/19.3.0/lib/libclntsh.so.19.1
/home/db/grid/product/19.3.0/lib/libsqlplus.so
[Dec 26, 2023 4:17:26 PM] [INFO] Prerequisite check "CheckActiveFilesAndExecutables" failed.
The details are:
Following active files/executables/libs are used by ORACLE_HOME :/home/db/grid/product/19.3.0
/home/db/grid/product/19.3.0/lib/libclntsh.so.19.1
/home/db/grid/product/19.3.0/lib/libsqlplus.so
[Dec 26, 2023 4:17:26 PM] [SEVERE] OUI-67073:UtilSession failed: Prerequisite check "CheckActiveFilesAndExecutables" failed.
2、处理:
通过 lsof 定位使用该文件的进程及其 PID,杀掉该进程后 resume 继续补丁安装进程:opatchauto resume:
[root@hl10oracldb7001 ~]# fuser /home/db/grid/product/19.3.0/lib/libclntsh.so.19.1
/home/db/grid/product/19.3.0/lib/libclntsh.so.19.1: 37358m
[root@hl10oracldb7001 ~]# lsof /home/db/grid/product/19.3.0/lib/libclntsh.so.19.1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sqlplus 37358 grid mem REG 253,8 79889800 202759624 /home/db/grid/product/19.3.0/lib/libclntsh.so.19.1
[root@hl10oracldb7001 ~]# kill -9 37358
[root@hl10oracldb7001 ~]#
备注:lsof 是 List Open File 的缩写, 主要用来获取被进程打开文件的信息。
使用 -u 选项可以列出指定用户已经打开的文件,该选项后面可以接多个用户名,每个用户名之间用空格隔开,表示列出所有指定用户已打开的所有文件
lsof -u oracle|more
如果要排除指定用户已经打开的文件,可以在用户名前加 ^ 符号:
lsof -u ^oracle|more
示例:
session 1:操作杀进程的会话
root@ora19c:/root>lsof /oracle/app/oracle/product/19.3.0/db_1/lib/libclntsh.so.19.1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
tnslsnr 1202 oracle mem REG 253,0 81925256 50385516 /oracle/app/oracle/product/19.3.0/db_1/lib/libclntsh.so.19.1
sqlplus 7151 oracle mem REG 253,0 81925256 50385516 /oracle/app/oracle/product/19.3.0/db_1/lib/libclntsh.so.19.1
root@ora19c:/root>kill -9 7151
root@ora19c:/root>
session 2:被杀进程的会话
oracle@ora19c:/home/oracle>sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 27 10:32:29 2023
Version 19.14.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.14.0.0.0
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB01 READ WRITE NO
SQL> Killed
oracle@ora19c:/home/oracle>