Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Core-Dump-Datei und Hinzufügen von Debug-Codes in der ausführbaren Anwendungsdatei für Oracle Apps

Generierung der Core-Dump-Datei von Oracle Concurrent Manager

Oracle Concurrent Manager besteht aus vielen ausführbaren Dateien, und wir hatten oft verschiedene Probleme damit. Wenn eine ausführbare Datei mit einem Segmentierungsfehler oder Signal 11 endet, sollte eine Kerndatei für Oracle Concurrent Manager erstellt werden.

Wenn Sie feststellen, dass keine Core-Datei erstellt wird, ist ulimit für Core-Dateien auf Ihrem System möglicherweise auf 0 gesetzt.
Überprüfen Sie dies wie folgt:
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

Überprüfen Sie die Ausgabe auf „Kerndateigröße (Blöcke)“. Wenn dieser Wert auf 0 oder einen niedrigen Wert gesetzt ist, kann er zurückgesetzt werden, damit Kerndateien jeder Größe in der aktuellen Sitzung mit der folgenden Syntax erstellt werden können:

ulimit -c unlimited

Wenn der Unix-Benutzer diesen Satz in der Umgebung hat, bevor er den Concurrent Manager und den Apps-Listener startet,
dann kann die Concurrent-Processing-Umgebung Core-Dateien erstellen.

Die ausführbare Datei, die mit Segmentierungsfehler oder Signal 11 endet, sollte mit Debug-Symbolen erneut verknüpft werden, um eine nützliche Kerndatei zu erhalten. Dazu wird der Parameter link_debug=y an adrelink.sh übergeben.
Zum Beispiel:

adrelink.sh force=y link_debug=y "fnd FNDLIBR"

Nachdem die ausführbare Datei mit Debug-Symbolen neu verknüpft wurde und Sie eine Kerndatei haben, vergewissern Sie sich, dass Sie die richtige
Kerndatei für die ausführbare Datei haben, die mit der folgenden Syntax abgestürzt ist:

file core
core: ELF 32-bit MSB core file SPARC Version 1, from 'FNDLIBR'

Verwenden Sie nun den Debugger, um einen Stack-Trace zu erhalten.
Für Linux ist der Debugger gdb:

gdb $FND_TOP/bin/FNDLIBR core

Für Solaris ist der Debugger dbx:

dbx $FND_TOP/bin/FNDLIBR core

Hinzufügen von Debug-Code zur ausführbaren Datei der Anwendung, wie vom Oracle-Support bereitgestellt

Es wird oft gesehen, dass der oben generierte Core-Dump nicht ausreicht, um das Problem zu beheben. Der Oracle-Support könnte daher einen Debug-Code bereitstellen, um das Problem weiter zu vertiefen

Hier sind die allgemeinen Schritte zum Hinzufügen von Debug-Codes zur ausführbaren Datei der Anwendung.

Tatsächlich sind dies Schritte, denen sogar adpatch folgt, um lib-Dateien in der ausführbaren Produktdatei zu ersetzen

Angenommen, Sie müssen die Objektdatei „invir.o“ in die ausführbare INVLIBR-Datei einbinden.

Bevor Sie etwas unternehmen, vergewissern Sie sich, dass die gleichzeitigen Manager heruntergefahren sind.

Überprüfen wir zuerst die Versionen:

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 $

Wir haben also derzeit Version 115.6 auf unserem System und müssen 115.6.debug einbinden
Der erste Schritt besteht darin, die aktuelle Version zu sichern:

cd $INV_TOP/lib; cp invir.o invir.o.save

Kopieren Sie die Debug-Version:

cp /u00/to/debug/file/invir.o .

Sicherungskopie der Dateien erstellen

cp libinv.a libinv.a.save

Fügen Sie nun die Debug-Version zu libinv.a hinzu (vergessen Sie diesen Schritt nicht)

ar rv libinv.a invir.o

Jetzt können Sie INVLIBR erneut verknüpfen:(Sie können auch adadmin verwenden)

adrelink.sh force=y "inv INVLIBR"

Die Überprüfung der Version zeigt nun:

adident Header $INV_TOP/bin/INVLIBR |grep invir.o
$Header: invir.opp 115.6.debug 2001/04/11 21:19:07 aweisber ship $

Unser Debug-Code ist eingebunden und kann ausgeführt werden. Starten Sie die Manager-Sicherung, und Debugging-Sachen wären verfügbar. Sobald das Problem reproduziert wurde, können wir das Debugging deaktivieren, indem wir das folgende Verfahren befolgen

Der erste Schritt besteht darin, die aktuelle Version zu sichern und den alten Code zurück zu verschieben

cd $INV_TOP/lib; 
cp invir.o invir.o.debug
cp invir.o.save invir.o

Stellen Sie die alte .a-Datei wieder her

cp libinv.a.save libinv.a

Jetzt können Sie INVLIBR erneut verknüpfen:(Sie können auch adadmin verwenden)

adrelink.sh force=y "inv INVLIBR"

Die Überprüfung der Version zeigt nun:

adident Header $INV_TOP/bin/INVLIBR |grep invir.o
$Header: invir.opp 115.6 2001/04/11 21:19:07 aweisber ship $

Verwandte Artikel

So finden Sie die Version der EBS R12-Komponenten

Oracle EBS 11i/R12/R12.1/R12.2

Oracle-DBA:Hanganalyze, Systemstatusauszug, v$wait_chains

So aktivieren Sie den SQL-Trace, das Ereignis 10046 in der Oracle-Datenbank und das Dienstprogramm trcsess, tkprof