Не існує прямого методу; вам доведеться або проаналізувати журнали (як згадується в іншій відповіді), або скористатися альтернативними методами, щоб побачити, що відбувається в тривалому процесі.
Особисто я пропоную використовувати автономні транзакції, щоб увімкнути цю функцію - не на саму транзакцію, а як механізм реєстрації даних, який дозволяє вам знати, що відбувається. Наприклад, ви могли б здійснити виклик PROCEDURE LONG_ACTION PROCEDURE WRITE_LOG_ENTRY (визначений як автономна транзакція), який запише VARCHAR2 в іншу таблицю. Автономні транзакції НЕ перешкоджають вашій поточній транзакції (з ЛОГІЧНОГО погляду; остерігайтеся потенційних наслідків для продуктивності), і таким чином ви можете бачити, що відбувається через ваші записи в журналі, незалежно від КОМІТЕТУ або ЗВ'ЯЗКУ в поточній транзакції. Однак це можна зробити за допомогою одного масивного оператора DML; вам доведеться використовувати цикл.
Поміркуйте:
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;
З огляду на вищесказане, ви отримаєте запис журналу на кожні 500 рядків, оброблених незалежно від успіху тривалої дії. Якщо вам потрібен точний дублікат даних, щоб побачити, як вони працюють, я пропоную зробити дублікат таблиці та викликати процедуру, яка буде дублювати дані (процедура є автономною транзакцією). Потім нуклеюйте дані за фактом. (Немає необхідності у дублюванні.)
Далі, якщо це з метою налагодження, я пропоную видалити або різко зменшити потребу в таких журналах, коли речі перевіряються. І, як завжди, тестуйте, тестуйте, тестуйте на власній системі, щоб перевірити, як все буде працювати. (Див. Коментар від Niall для гарного прикладу того, як ведення журналу може кардинально вплинути на продуктивність.)
(Нарешті, тому, що я знехтував згадувати це раніше: остерігайтеся автономних транзакцій. Розумійте їх повністю перед реалізацією, і не використовуйте їх "просто тому, що". Вони можуть бути використані мільйонними способами неправильно (скажімо, наприклад, для ATTEMPT для уникайте помилок мутації в тригері), тому завжди краще знайти альтернативи, якщо це можливо. Якщо ви не можете, то продовжуйте з обережністю. Ведення журналу під час довготривалих операцій завжди було одним із випадків, коли це досить безпечно (ігнорування проблеми з ефективністю), але не поспішайте застосовувати його до інших цілей, не знаючи наслідків.)