Génération du fichier de vidage de mémoire d'Oracle Concurrent Manager
Les gestionnaires simultanés Oracle se composent de nombreux exécutables et nous avons souvent rencontré divers problèmes avec ceux-ci. Lorsqu'un exécutable se termine par une erreur de segmentation ou un signal 11, un fichier principal pour le gestionnaire simultané Oracle doit être créé.
Si vous ne trouvez pas qu'un fichier core est créé, alors ulimit peut être défini sur 0 pour les fichiers core de votre système.
Vérifiez ceci comme suit :
ulimit -a
ulimit -a time(seconds) unlimited file(blocks) unlimited data(kbytes) unlimited stack(kbytes) unlimited coredump(blocks) unlimited nofiles(descriptors) 4096 vmemory(kbytes) unlimited
Vérifiez la sortie pour "taille du fichier principal (blocs)". Si ce paramètre est défini sur 0 ou sur une valeur faible, il peut être réinitialisé pour autoriser la création de fichiers principaux de n'importe quelle taille dans la session en cours à l'aide de la syntaxe :
ulimit -c unlimited
Si l'utilisateur Unix a défini ce paramètre dans l'environnement avant de démarrer le gestionnaire simultané et l'écouteur d'applications,
alors l'environnement de traitement simultané pourra créer des fichiers de base.
L'exécutable qui se termine par l'erreur de segmentation ou le signal 11 doit être reconnecté avec des symboles de débogage afin
d'obtenir un fichier de base utile. Cela se fait en passant le paramètre link_debug=y à adrelink.sh.
Par exemple :
adrelink.sh force=y link_debug=y "fnd FNDLIBR"
Une fois que l'exécutable est reconnecté avec des symboles de débogage et que vous disposez d'un fichier core, assurez-vous d'avoir le bon
fichier core pour l'exécutable qui a planté en utilisant la syntaxe :
file core core: ELF 32-bit MSB core file SPARC Version 1, from 'FNDLIBR'
Utilisez maintenant le débogueur pour obtenir une trace de la pile.
Pour Linux, le débogueur est gdb :
gdb $FND_TOP/bin/FNDLIBR core
Pour Solaris, le débogueur est dbx :
dbx $FND_TOP/bin/FNDLIBR core
Ajout du code de débogage à l'exécutable de l'application tel que fourni par le support Oracle
On constate souvent que le vidage de mémoire généré ci-dessus n'est pas suffisant pour résoudre le problème. Le support Oracle peut donc fournir un code de débogage pour approfondir le problème
Voici les étapes générales pour ajouter des codes de débogage dans l'exécutable de l'application.
En fait, ce sont même des étapes suivies par adpatch pour remplacer les fichiers lib dans l'exécutable du produit
Disons que vous devez lier le fichier objet "invir.o" dans l'exécutable INVLIBR.
Avant de faire quoi que ce soit, assurez-vous que les gestionnaires simultanés sont fermés.
Commençons par vérifier les versions :
adident Header $INV_TOP/lib/invir.o $Header: invir.opp 115.6 2001/04/11 16:14:32 pkm ship $ adident Header /u00/to/debug/file/invir.o $Header: invir.opp 115.6.debug 2001/04/11 21:19:07 aeisber ship $ adident Header $INV_TOP/bin/INVLIBR |grep invir $Header: invir.op 115.6 2001/04/11 16:14:32 pkm ship $
Nous avons donc actuellement la version 115.6 sur notre système et nous devons établir un lien dans 115.6.debug
La première étape consiste à sauvegarder la version actuelle :
cd $INV_TOP/lib; cp invir.o invir.o.save
Copiez dans la version de débogage :
cp /u00/to/debug/file/invir.o .
Faire une sauvegarde des fichiers
cp libinv.a libinv.a.save
Ajoutez maintenant la version de débogage à libinv.a (N'oubliez pas cette étape)
ar rv libinv.a invir.o
Vous pouvez maintenant réassocier INVLIBR :(vous pouvez également utiliser adadmin)
adrelink.sh force=y "inv INVLIBR"
La vérification de la version affiche maintenant :
adident Header $INV_TOP/bin/INVLIBR |grep invir.o $Header: invir.opp 115.6.debug 2001/04/11 21:19:07 aweisber ship $
Notre code de débogage est lié et prêt à être exécuté. Redémarrez les gestionnaires et des éléments de débogage seraient disponibles. Une fois le problème reproduit, nous pouvons désactiver le débogage en suivant la procédure ci-dessous
La première étape consiste à sauvegarder la version actuelle et à restaurer l'ancien code
cd $INV_TOP/lib; cp invir.o invir.o.debug cp invir.o.save invir.o
Restaurer l'ancien fichier .a
cp libinv.a.save libinv.a
Vous pouvez maintenant réassocier INVLIBR :(vous pouvez également utiliser adadmin)
adrelink.sh force=y "inv INVLIBR"
La vérification de la version affiche maintenant :
adident Header $INV_TOP/bin/INVLIBR |grep invir.o $Header: invir.opp 115.6 2001/04/11 21:19:07 aweisber ship $
Articles connexes
Comment trouver la version des composants EBS R12
Oracle EBS 11i/R12/R12.1/R12.2
Oracle DBA :Hanganalyze, vidage de l'état du système, v$wait_chains
Comment activer la trace SQL, événement 10046 dans la base de données Oracle et trcsess, utilitaire tkprof