Không có phương pháp trực tiếp; bạn sẽ phải phân tích các bản ghi (như được đề cập trong câu trả lời khác) hoặc sử dụng các phương pháp thay thế để xem những gì đang xảy ra trong một quy trình dài.
Cá nhân, tôi khuyên bạn nên sử dụng các giao dịch tự trị để kích hoạt tính năng này - không phải trên chính giao dịch, mà là một cơ chế ghi nhật ký cho bạn biết những gì đang diễn ra. Ví dụ: bạn có thể có PROCEDURE LONG_ACTION gọi PROCEDURE WRITE_LOG_ENTRY (được định nghĩa là giao dịch tự trị) sẽ ghi VARCHAR2 sang bảng khác. Các giao dịch tự động KHÔNG can thiệp vào giao dịch hiện tại của bạn (từ góc độ LOGICS; hãy cẩn thận với các tác động tiềm năng đến hiệu suất) và vì vậy bạn có thể thấy những gì đang diễn ra thông qua các mục đăng nhập của mình bất kể CAM KẾT hoặc ROLLBACK trong giao dịch hiện tại của bạn. Điều đó nói rằng, bạn có thể làm điều đó với một tuyên bố DML lớn; bạn phải sử dụng một vòng lặp.
Xem xét:
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;
Với những điều trên, bạn sẽ nhận được một mục nhật ký cho mỗi 500 hàng được xử lý bất kể thành công của hành động dài. Nếu bạn cần một bản sao chính xác của dữ liệu để xem nó đang hoạt động, tôi khuyên bạn nên tạo một bảng trùng lặp và gọi một thủ tục sẽ sao chép dữ liệu (thủ tục là một giao dịch tự trị). Sau đó nuke dữ liệu sau thực tế. (Không cần sao chép.)
Hơn nữa, nếu điều này là cho mục đích gỡ lỗi, tôi khuyên bạn nên loại bỏ hoặc giảm đáng kể nhu cầu đăng nhập như vậy khi mọi thứ đã được thử nghiệm. Và, như mọi khi, kiểm tra, thử nghiệm, kiểm tra trên hệ thống của riêng bạn để xác minh cách mọi thứ sẽ hoạt động. (Xem bình luận từ Niall để biết ví dụ hay về cách đăng nhập có thể ảnh hưởng mạnh đến hiệu suất.)
(Cuối cùng, vì tôi đã bỏ qua việc đề cập đến nó trước đây: hãy cẩn thận các giao dịch tự trị. Hãy hiểu chúng đầy đủ trước khi thực hiện và đừng sử dụng chúng "chỉ vì". Chúng có thể được sử dụng theo hàng triệu cách không chính xác (ví dụ: ATTEMPT để tránh một lỗi đột biến trong trình kích hoạt), vì vậy, tốt nhất là luôn luôn tìm các giải pháp thay thế, nếu có thể. Nếu không thể, hãy tiến hành thận trọng. Đăng nhập trong các ops chạy dài luôn là một trường hợp khá an toàn (bỏ qua vấn đề về hiệu suất), nhưng đừng vội áp dụng nó vào các mục đích sử dụng khác mà không biết hậu quả.)