Jeśli chcemy obserwować wywołania procedur w projekcie (np. kiedy zostały wywołane i przez jaką inną procedurę) możemy skorzystać z dobrodziejstw pakietu dbms_trace.
Sama obserwacja wymaga kilku czynności, natomiast przed przystąpieniem do pracy z tym pakietem musimy powziąć przygotowania.
Pakiet dbms_trace jest już w bazie skompilowany i gotowy do użycia. Do pracy będą nam też potrzebne odpowiednie tabelki do których ładowane będą dane z trace'owania naszej aplikacji. Tych tabelek jeszcze nie mamy. Skrypt tworzący te tabelki oraz niezbędne widoki możemy znaleźć w $ORACLE_HOME/rdbms/admin i nazywa się tracetab.sql
tracetab.sql na pewno znajdziecie w wersji Enterprise 11g, sprawdzałem to również na Express Edition 10g ale tego pliku tam nie znalazłem. Być może trzeba by go było skądś ściągnąć. Pakiet dbms_trace był w obu wersjach. Jeśli podczas wykonywania tracetab.sql wypluje nam kilka błędów to nie ma co się przejmować, wszystko i tak działa.
Generalnie dalsza część opowieści po utworzeniu odpowiedniej struktury tabel i widoków przedstawia się tak:
- Trzeba umożliwić tracing dla pakietów i procedur/funkcji które chcemy obserwować.
ALTER PROCEDURE NAZWA_PROCEDURY COMPILE DEBUG;
lub
ALTER PACKAGE NAZWA_PAKIETU COMPILE DEBUG BODY;
lub
wykonanie następnego punktu i ponowną kompilację kodu.
- Włączyć tracowanie dla sesji (tylko w tym przypadku będziemy mogli obserwować bloki anonimowe):
ALTER SESSION SET PLSQL_DEBUG=TRUE;
- Ustawić poziom trace'owania:
Poziomów trace jest kilka, na pewno uncle google je zna :) Powyższe (trace_all_calls) śledzi wszystkie wywołania procedur/funkcji/pakietów).
- Wykonanie procedury/funkcji dla której włączyliśmy tracing;
- Wyłączenie trace'owania ( po co mają nam się zbierać dane i baza puchnąć jak już mamy to co chcemy?)
Po wszystkim możemy zajrzeć do widoków:
plsql_trace_events
plsql_trace_runs
zawierających informacje na temat obserwowanych procedur i funkcji, czasu ich wywołania oraz kilku innych ciekawych rzeczy.
Uprzedzając pytanie: Nie. Nie możemy tej metody wykorzystać do obserwacji odwołań do tabeli/widoków lub poczynań użyszkodników. Do tego służy audyt (również opisany na tym blogu)
Uprzedzając kolejne pytanie: Tak. Inni niż SYS użytkownicy również mogą korzystać z tej metody, jednak najpierw należy im nadać uprawnienia do pakietu dbms_trace oraz w.w. widoków (patrz artykuł o uprawnieniach w kursie SQL na tym blogu) :)
Brak komentarzy:
Prześlij komentarz