Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Plik zrzutu rdzenia i dodawanie kodów debugowania w aplikacji wykonywalnej dla aplikacji Oracle

Generowanie pliku zrzutu rdzenia Oracle Concurrent Manager

Menedżery współbieżne Oracle składają się z wielu plików wykonywalnych i często napotykaliśmy z nimi różne problemy. Gdy plik wykonywalny kończy się błędem segmentacji lub sygnałem 11, należy utworzyć plik podstawowy dla menedżera współbieżnego Oracle.

Jeśli nie stwierdzasz, że tworzony jest plik core, ulimit może być ustawiony na 0 dla plików core w twoim systemie.
Sprawdź to w następujący sposób:
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

Sprawdź dane wyjściowe pod kątem „rozmiaru pliku podstawowego (bloków)”. Jeśli ta wartość jest ustawiona na 0 lub niską wartość, można ją zresetować, aby umożliwić tworzenie plików podstawowych o dowolnym rozmiarze w bieżącej sesji przy użyciu składni:

ulimit -c unlimited

Jeśli użytkownik Uniksa ma to ustawione w środowisku przed uruchomieniem współbieżnego menedżera i nasłuchiwania aplikacji,
wtedy współbieżne środowisko przetwarzania będzie mogło tworzyć podstawowe pliki.

Plik wykonywalny, który kończy się błędem segmentacji lub sygnałem 11, powinien zostać ponownie połączony z symbolami debugowania,
aby uzyskać użyteczny plik core. Odbywa się to poprzez przekazanie parametru link_debug=y do adrelink.sh.
Na przykład:

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

Gdy plik wykonywalny zostanie ponownie połączony za pomocą symboli debugowania i masz plik core, upewnij się, że masz odpowiedni
plik core dla pliku wykonywalnego, który uległ awarii przy użyciu składni:

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

Teraz użyj debugera, aby uzyskać zrzut stosu.
Dla Linuxa debuggerem jest gdb:

gdb $FND_TOP/bin/FNDLIBR core

Dla Solarisa debuggerem jest dbx:

dbx $FND_TOP/bin/FNDLIBR core

Dodawanie kodu debugowania do pliku wykonywalnego aplikacji dostarczonego przez Oracle Support

Często można zauważyć, że wygenerowany powyżej zrzut rdzenia nie wystarcza do rozwiązania problemu. W związku z tym pomoc techniczna Oracle może dostarczyć kod debugowania, aby dokładniej zbadać problem

Oto ogólne kroki dotyczące dodawania kodów debugowania w pliku wykonywalnym aplikacji.

W rzeczywistości są to kroki, po których następuje nawet dodanie poprawki w celu zastąpienia plików lib w pliku wykonywalnym produktu

Załóżmy, że musisz połączyć plik obiektowy „invir.o” z plikiem wykonywalnym INVLIBR.

Zanim cokolwiek zrobisz, upewnij się, że współbieżni menedżerowie są zamknięci.

Najpierw sprawdźmy wersje:

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 $

Tak więc mamy obecnie wersję 115.6 w naszym systemie i musimy połączyć się w 115.6.debug
Pierwszym krokiem jest utworzenie kopii zapasowej aktualnej wersji:

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

Skopiuj w wersji debugowania:

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

Wykonaj kopię zapasową plików

cp libinv.a libinv.a.save

Teraz dodaj wersję debugowania do libinv.a (nie zapomnij o tym kroku)

ar rv libinv.a invir.o

Teraz możesz ponownie połączyć INVLIBR:(możesz również użyć adadmina)

adrelink.sh force=y "inv INVLIBR"

Sprawdzanie wersji pokazuje teraz:

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

Nasz kod debugowania jest połączony i gotowy do uruchomienia. Uruchom kopię zapasową menedżerów, a będzie dostępne debugowanie. Po odtworzeniu problemu możemy wyłączyć debugowanie, wykonując poniższą procedurę

Pierwszym krokiem jest utworzenie kopii zapasowej aktualnej wersji i przywrócenie starego kodu

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

Przywróć stary plik .a

cp libinv.a.save libinv.a

Teraz możesz ponownie połączyć INVLIBR:(możesz również użyć adadmina)

adrelink.sh force=y "inv INVLIBR"

Sprawdzanie wersji pokazuje teraz:

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

Powiązane artykuły

Jak znaleźć wersję komponentów EBS R12

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

Oracle DBA:Hanganalyze, zrzut stanu systemu, v$wait_chains

Jak włączyć śledzenie SQL, zdarzenie 10046 w bazie danych Oracle i trcsess, narzędzie tkprof


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Urządzenie do odzyskiwania danych bez utraty danych

  2. Jak tworzyć pakiety PL/SQL w bazie danych Oracle

  3. Jak rozwiązać problem ORA-011033:Trwa inicjowanie lub wyłączanie ORACLE

  4. Krok po kroku R12.2.6 Instalacja EBS na Virtual Box Część -2

  5. Buforowanie Unicode Oracle