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