Je suis sûr que quelqu'un qui lit ceci demandera:"Comment ne le savais-tu pas?". Mais parfois, les choses les plus simples nous viennent tard dans le jeu alors que d'autres le savaient tôt.
J'ai corrigé Oracle sur Windows depuis l'époque de Windows NT. Tous ceux qui corrigent Oracle sous Windows savent qu'OPatch rechigne souvent au fait que certains fichiers DLL sont verrouillés par d'autres processus. Le moyen le plus simple pour moi de contourner ce problème consiste simplement à renommer les fichiers DLL qui seront remplacés par le correctif. Le système d'exploitation ne vous laissera pas supprimer les fichiers DLL, mais vous pouvez les renommer, puis OPatch pourra continuer. Au début d'OPatch, j'exécutais l'application, elle recrachait la DLL qui était verrouillée. Je renommerais le fichier DLL, puis exécuterais à nouveau OPatch pour obtenir le prochain fichier DLL verrouillé. Ce processus se répéterait environ 20 fois jusqu'à ce qu'OPatch ne trouve aucun fichier DLL verrouillé. Au moins maintenant, lorsque vous exécutez OPatch, il vous donne une liste complète des fichiers DLL qui sont verrouillés.
Parfois, je veux connaître le processus qui verrouille le fichier DLL. Dans le passé, je téléchargeais l'un de ces utilitaires disponibles gratuitement pour me montrer le ou les processus verrouillant le fichier en question et mettre fin au processus. Mais je n'aime pas que les logiciels gratuits gonflent mes serveurs, donc je supprime souvent l'utilitaire lorsque j'ai terminé. Jusqu'à la prochaine fois que j'aurai besoin de cet utilitaire…
Quelqu'un m'a récemment indiqué la note Metalink 294350.1 qui contenait une petite pépite dont je n'étais pas au courant avant de lire ce document. Apparemment, Windows inclut un utilitaire de ligne de commande pour montrer quels processus verrouillent les fichiers DLL. Je peux maintenant faire :
tasklist /m
La sortie peut être longue, il est donc avantageux de stocker la sortie dans un fichier, puis d'ouvrir le fichier dans un éditeur de texte :
tasklist /m > c:\oracle\task_list.txt notepad c:\oracle\task_list.txt
Je peux alors utiliser la fonction de recherche de l'éditeur de texte pour localiser la DLL en question.
Maintenant, comment se fait-il que ce petit utilitaire ait échappé à mon attention toutes ces années ?