检查Windows下的动态链接库文件(DLL)被哪些进程占用。
注意:本文所说的DLL可以是Oracle DLL ,也可以是 System DLL
在Windows下打过Oracle bundle patch的人都有类似的经验:
Oracle开头的服务都停止了,但是patch还是打不上,提示oci.dll被占用。
出现此类原因,大多数都是没有仔细阅读随patch一起的readme.html文档造成的。
一般而言,出现DLL被占用,是由于DTC(Distributed Transaction Coordinator)服务没有关闭导致的.并且在readme.html文档中,有明确要求“要关闭Distributed Transaction Coordinator服务”
那好了,大家可能会想:对于oci.dll被占用,我从readme.html上得到经验,去关闭XXXX服务就行了。
那对于其他的DLL呢?在F:\oracle\product\10.2.0\db_1\BIN下的DLL多了去了,给出一个DLL名称,怎么去查该DLL被哪个进程锁定?
mos文章Script for Checking Services, DLL Locks, Oracle Processes Before Applying A Patch (文档 ID 454040.1)给出了一个脚本,该脚本的名称为PREPATCH.BAT,请到如下链接中下载:http://download.csdn.net/detail/msdnchina/9281087
1.下载到本地之后,解压开,放到E:\下(其他盘符或者其他目录均可),
2. cmd下进入到E:\下,运行此"PREPATCH.BAT"即可。如下是运行的日志:
SCRIPT : PREPATCH.BAT PURPOSE : PRECHECK BEFORE APPLYING A PATCH DISCLAIMER =========== This script will check the Inventory Pointer,Services,DLL Locks,Oracle Process. The Script Requires The following Inputs : ---------------------------------------------------- ORACLE_SID ORACLE_HOME ORACLE_HOME_NAME Enter The ORACLE_SID [] :FS --->手工输入FS,注意一定要用大写!!! Enter The ORACLE_HOME [] :F:\oracle\product\10.2.0\db_1 --->手工输入 Enter The ORACLE_HOME_NAME [] :OraDb10g_home1 --->手工输入(从C:\Program Files\Oracle\Inventory\ContentsXML\inventory.xml文件中获得ORACLE_HOME_NAME) ========================================= ORACLE_SID Is Set As FS ORACLE_HOME Is Set As F:\oracle\product\10.2.0\db_1 ORACLE_HOME_NAME Is As OraDb10g_home1 ========================================= 请按任意键继续. . . MENU ==== 1) CHECK THE WINDOWS INVENTORY POINTER LOCATION 2) CHECK THE ORACLE SERVICES 3) CHECK IF ANY DLLS IN THE ORACLE_HOME IS LOCKED 4) LIST ALL THE ORACLE PROCESS 5) CHECK IF A PARTICULAR DLL IS LOCKED 6) CHECK THE PROCESSOR INFORMATION 7) CHECK FOR MONTECITO PROCESSOR 8) EXIT Please Select A Choice[8]: 5 ---->选择5 CHECKING IF A PARICULAR DLL IS LOCKED ------------------------------------- Enter The DLL Name [ oci.dll ]: oraclient10.dll---->手工敲入DLL的名字 映像名称 PID 模块 ========================= ======== ============================================ TNSLSNR.EXE 1292 oraclient10.dll oracle.exe 5512 oraclient10.dll 请按任意键继续. . .