Es gibt keine direkte Methode; Sie müssen entweder die Protokolle analysieren (wie in einer anderen Antwort erwähnt) oder alternative Methoden verwenden, um zu sehen, was in einem langfristigen Prozess geschieht.
Persönlich empfehle ich die Verwendung autonomer Transaktionen, um diese Funktion zu aktivieren - nicht für die Transaktion selbst, sondern als Protokollierungsmechanismus, der Sie über die aktuellen Vorgänge informiert. Beispielsweise könnte PROCEDURE LONG_ACTION den Aufruf PROCEDURE WRITE_LOG_ENTRY (definiert als autonome Transaktion) haben, der einen VARCHAR2 in eine andere Tabelle schreibt. Autonome Transaktionen beeinträchtigen Ihre aktuelle Transaktion NICHT (aus LOGISCHER Sicht; achten Sie auf mögliche Auswirkungen auf die Leistung), sodass Sie anhand Ihrer Protokolleinträge unabhängig von einem COMMIT oder ROLLBACK in Ihrer aktuellen Transaktion sehen können, was vor sich geht. Das heißt, Sie können das mit einer massiven DML-Anweisung tun. Sie müssten eine Schleife verwenden.
Erwägen:
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;
Aus den oben genannten Gründen erhalten Sie unabhängig vom Erfolg der langen Aktion alle 500 verarbeiteten Zeilen einen Protokolleintrag. Wenn Sie ein genaues Duplikat der Daten benötigen, um zu sehen, wie es funktioniert, empfehle ich, eine Duplikattabelle zu erstellen und eine Prozedur aufzurufen, die die Daten dupliziert (wobei die Prozedur eine autonome Transaktion ist). Dann nuke die Daten nachträglich. (Keine Notwendigkeit zur Vervielfältigung.)
Wenn dies zum Debuggen gedacht ist, empfehle ich außerdem, die Notwendigkeit einer solchen Protokollierung zu entfernen oder drastisch zu reduzieren, wenn die Dinge getestet wurden. Und wie immer testen, testen, testen Sie auf Ihrem eigenen System, um zu überprüfen, wie die Dinge funktionieren werden. (Im Kommentar von Niall finden Sie ein gutes Beispiel dafür, wie sich die Protokollierung drastisch auf die Leistung auswirkt.)
(Schließlich, weil ich es versäumt habe, es vorher zu erwähnen: Passen Sie auf autonome Transaktionen auf. Verstehen Sie sie vollständig, bevor Sie sie implementieren, und verwenden Sie sie nicht "nur weil". Sie können auf millionenfache Weise falsch verwendet werden (sagen Sie zum Beispiel zu ATTEMPT) Vermeiden Sie einen mutierten Fehler in einem Trigger.) Wenn dies nicht möglich ist, sollten Sie immer nach Alternativen suchen. Wenn dies nicht möglich ist, gehen Sie vorsichtig vor. Die Protokollierung während längerer Operationen war immer ein Fall, in dem dies ziemlich sicher war (Ignorieren) Leistungsprobleme), aber beeilen Sie sich nicht, um es auf andere Verwendungen anzuwenden, ohne die Konsequenzen zu kennen.)