Tidak ada metode langsung; Anda harus memilah-milah log (seperti yang disebutkan dalam jawaban lain), atau menggunakan metode alternatif untuk melihat apa yang terjadi dalam proses jangka panjang.
Secara pribadi, saya sarankan menggunakan transaksi otonom untuk mengaktifkan fitur ini - bukan pada transaksi itu sendiri, tetapi sebagai mekanisme pencatatan yang memberi tahu Anda apa yang sedang terjadi. Misalnya, Anda bisa meminta PROSEDUR LONG_ACTION memanggil PROCEDURE WRITE_LOG_ENTRY (didefinisikan sebagai transaksi mandiri) yang akan menulis VARCHAR2 ke tabel lain. Transaksi otonom TIDAK mengganggu transaksi Anda saat ini (dari perspektif LOGICAL; waspadai dampak potensial terhadap kinerja) dan sehingga Anda dapat melihat apa yang terjadi melalui entri logging Anda terlepas dari KOMIT atau ROLLBACK dalam transaksi Anda saat ini. Yang mengatakan, Anda bisa melakukannya dengan satu pernyataan DML besar; Anda harus menggunakan loop.
Mempertimbangkan:
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;
Dengan diberikan di atas, Anda akan mendapatkan entri log untuk setiap 500 baris yang diproses terlepas dari keberhasilan tindakan panjang. Jika Anda membutuhkan duplikat data yang tepat untuk melihatnya saat berfungsi, saya sarankan membuat tabel duplikat dan memanggil prosedur yang akan menggandakan data (prosedur menjadi transaksi mandiri). Kemudian nuke data setelah fakta. (Tidak perlu duplikasi.)
Lebih lanjut, jika ini untuk tujuan debugging, saya sarankan menghapus atau secara drastis mengurangi kebutuhan untuk logging tersebut ketika hal-hal telah diuji. Dan, seperti biasa, uji, uji, uji pada sistem Anda sendiri untuk memverifikasi cara kerja. (Lihat komentar dari Niall untuk contoh yang baik tentang bagaimana logging dapat secara drastis mempengaruhi kinerja.)
(Akhirnya, karena saya lalai menyebutkannya sebelumnya: waspadalah terhadap transaksi otonom. Pahami sepenuhnya sebelum penerapan, dan jangan menggunakannya "hanya karena". Mereka dapat digunakan dalam sejuta cara secara tidak benar (misalnya, misalnya, untuk meminta ATTEMPT untuk hindari kesalahan mutasi pada pemicu), jadi selalu yang terbaik untuk menemukan alternatif, jika mungkin. Jika Anda tidak bisa, maka lanjutkan dengan hati-hati. Logging selama operasi yang berjalan lama selalu menjadi satu kasus di mana itu cukup aman (mengabaikan masalah kinerja), tetapi jangan buru-buru menerapkannya untuk penggunaan lain tanpa mengetahui konsekuensinya.)