Ich bin mir sicher, dass jemand, der dies liest, fragen wird:„Woher weißt du das nicht?“. Aber manchmal fallen uns die einfachsten Dinge erst spät im Spiel ein, während andere es schon früh wussten.
Ich habe Oracle seit den Tagen von Windows NT unter Windows gepatcht. Jeder, der Oracle unter Windows patcht, weiß, dass OPatch sich oft darüber sträubt, dass einige DLL-Dateien von anderen Prozessen gesperrt werden. Der einfachste Weg für mich, dies zu umgehen, besteht darin, einfach die DLL-Dateien umzubenennen, die durch den Patch ersetzt werden. Das Betriebssystem lässt Sie die DLL-Dateien nicht löschen, aber Sie können sie umbenennen und dann kann OPatch fortfahren. In den frühen Tagen von OPatch führte ich die Anwendung aus, die die gesperrte DLL ausspuckte. Ich würde die DLL-Datei umbenennen und dann OPatch erneut ausführen, um die nächste gesperrte DLL-Datei zu erhalten. Dieser Vorgang wiederholt sich etwa 20 Mal, bis OPatch keine gesperrten DLL-Dateien findet. Spätestens jetzt, wenn Sie OPatch ausführen, erhalten Sie eine vollständige Liste der gesperrten DLL-Dateien.
Manchmal möchte ich den Prozess wissen, der die DLL-Datei sperrt. In der Vergangenheit habe ich eines dieser frei verfügbaren Dienstprogramme heruntergeladen, um mir die Prozesse anzuzeigen, die die betreffende Datei sperren, und den Prozess beendet. Aber ich mag es nicht, wenn Freeware meine Server aufbläst, also entferne ich oft das Dienstprogramm, wenn ich fertig bin. Bis ich dieses Dienstprogramm das nächste Mal benötige …
Jemand hat mich kürzlich auf die Metalink-Notiz 294350.1 verwiesen, die einen kleinen Nugget enthielt, in den ich vor dem Lesen dieses Dokuments nicht eingeweiht war. Anscheinend enthält Windows ein Befehlszeilenprogramm, um anzuzeigen, welche Prozesse DLL-Dateien sperren. Ich kann jetzt:
tasklist /m
Die Ausgabe kann lang sein, daher ist es vorteilhaft, die Ausgabe in einer Datei zu speichern und die Datei dann in einem Texteditor zu öffnen:
tasklist /m > c:\oracle\task_list.txt notepad c:\oracle\task_list.txt
Ich kann dann die Suchfunktion des Texteditors verwenden, um die betreffende DLL zu finden.
Wie kommt es, dass dieses kleine Dienstprogramm all die Jahre meiner Aufmerksamkeit entgangen ist?