Doğrudan bir yöntem yoktur; Günlükleri incelemelisiniz (başka bir cevapta belirtildiği gibi) veya uzun süren bir süreçte neler olduğunu görmek için alternatif yöntemler kullanmanız gerekir.
Şahsen, bu özelliği etkinleştirmek için özerk işlemler kullanmanızı öneririm - işlemin kendisinde değil, neler olduğunu bilmenizi sağlayan bir kayıt mekanizması olarak. Örneğin, başka bir tabloya VARCHAR2 yazacak PROCEDURE LONG_ACTION çağrı PROCEDURE WRITE_LOG_ENTRY (otonom bir işlem olarak tanımlanmıştır) olabilir. Özerk işlemler şu anki işleminize karışmaz (LOJİK bir bakış açısıyla; performans üzerindeki olası etkilerden sakının) ve böylece mevcut işleminizde bir KOMİTE veya ROLLBACK ne olursa olsun, kayıt girişlerinizle neler olup bittiğini görebilirsiniz. Bununla birlikte, bunu büyük bir DML ifadesiyle yapabileceğinizi söyledi; bir döngü kullanmak zorunda kalacaksın.
Düşünmek:
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;
Yukarıdakiler göz önüne alındığında, uzun eylemin başarısı ne olursa olsun, işlenen her 500 satır için bir günlük girişi alırsınız. Çalışmakta olduğunu görmek için verilerin kesin bir kopyasına ihtiyacınız varsa, yinelenen bir tablo hazırlamanızı ve verileri kopyalayacak bir prosedürü çağırmanızı (prosedür özerk bir işlemdir) öneririm. Sonra veriyi gerçeğin ardından çek. (Çoğaltmaya gerek yok.)
Ayrıca, eğer bu hata ayıklama amaçlıysa, test edildiğinde bu tür kayıtlara olan ihtiyacı ortadan kaldırmayı ya da büyük ölçüde azaltmayı öneriyorum. Ve her zamanki gibi, işlerin nasıl yürüdüğünü doğrulamak için kendi sisteminizde test edin, test edin, test edin. (Günlüğe kaydetmenin performansı nasıl önemli ölçüde etkileyebileceğine dair iyi bir örnek için Niall'in yorumuna bakın.)
(Son olarak, daha önce bahsetmeyi ihmal ettiğim için: özerk işlemlere dikkat edin. Bunları uygulamadan önce tamamen anlayın ve bunları "sadece çünkü" kullanmayın. Milyonlarca yanlış bir şekilde kullanılabilir (örneğin, ATTEMPT tetikte mutasyon hatası yapmaktan kaçının), bu nedenle mümkünse alternatifler bulmak her zaman en iyisidir. performans sorunları), ancak sonuçlarını bilmeden diğer kullanımlara uygulamak için acele etmeyin.)