Nie ma bezpośredniej metody; będziesz musiał albo przeanalizować dzienniki (jak wspomniano w innej odpowiedzi), albo użyć alternatywnych metod, aby zobaczyć, co dzieje się w długotrwałym procesie.
Osobiście sugeruję użycie autonomicznych transakcji, aby włączyć tę funkcję - nie w samej transakcji, ale jako mechanizm rejestrowania, który informuje Cię o tym, co się dzieje. Na przykład możesz mieć wywołanie PROCEDURE LONG_ACTION PROCEDURE WRITE_LOG_ENTRY (zdefiniowane jako transakcja autonomiczna), które zapisałoby VARCHAR2 do innej tabeli. Transakcje autonomiczne NIE zakłócają bieżącej transakcji (z perspektywy LOGICZNEJ, uważaj na potencjalny wpływ na wydajność), dzięki czemu możesz zobaczyć, co się dzieje, poprzez wpisy logowania, niezależnie od ZALECENIA lub ROLLBACK w bieżącej transakcji. To powiedziawszy, możesz to zrobić za pomocą jednej ogromnej instrukcji DML; musisz użyć pętli.
Rozważać:
TABLE LOG_ENTRIES defined as
activity_date date,
log_entry varchar2(2000)
TABLE BIG_JOB (definition doesn't really matter)
PROCEDURE WRITE_LOG_ENTRY
( str VARCHAR2 )
IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO LOG_ENTRIES VALUES ( SYSDATE, str );
COMMIT;
END;
PROCEDURE LONG_ACTION IS
c NUMBER;
BEGIN
FOR r IN ( SELECT * FROM BIG_JOB )
LOOP
c := c + 1;
UPDATE BIG_JOB z
SET fld = hairy_calculation
WHERE z.rowid = r.rowid;
IF MOD(c,500) = 0 THEN
WRITE_LOG_ENTRY ( c || ' rows processed.' );
END IF;
END LOOP;
COMMIT;
END;
Biorąc pod uwagę powyższe, otrzymasz wpis dziennika dla każdych 500 przetworzonych wierszy, niezależnie od powodzenia długiej akcji. Jeśli potrzebujesz dokładnego duplikatu danych, aby zobaczyć, jak działa, sugeruję utworzenie duplikatu tabeli i wywołanie procedury, która powieliby dane (procedura jest transakcją autonomiczną). Potem nuke dane po fakcie. (Nie ma potrzeby kopiowania).
Ponadto, jeśli jest to w celu debugowania, sugeruję usunięcie lub drastyczne zmniejszenie potrzeby takiego rejestrowania, gdy rzeczy zostały przetestowane. I jak zawsze testuj, testuj, testuj na swoim własnym systemie, aby sprawdzić, jak wszystko będzie działać. (Zobacz komentarz Nialla, aby zobaczyć dobry przykład, w jaki sposób rejestrowanie może drastycznie wpłynąć na wydajność).
(Wreszcie, ponieważ wcześniej nie wspomniałem o tym: strzeżcie się transakcji autonomicznych. Zrozumcie je w pełni przed wdrożeniem i nie używajcie ich „tylko dlatego, że”. Można ich używać na milion sposobów niepoprawnie (powiedzmy na przykład, aby PRÓBOWAĆ, aby unikaj błędu mutacji w wyzwalaczu), więc zawsze najlepiej jest znaleźć alternatywy, jeśli to możliwe. Jeśli nie możesz, postępuj ostrożnie. Rejestrowanie podczas długotrwałych operacji zawsze było jednym przypadkiem, w którym jest dość bezpieczne (ignorowanie problemy z wydajnością), ale nie spiesz się, aby zastosować go do innych zastosowań, nie znając konsekwencji.)