Bu konuyu anlatmak için önce bit transaction için grafik çizelim. Aşağıda grafiğimizi görüyorsunuz.

Bu grafikte x ekseninde zamanı görüyoruz. y de ise çağrılan fonksiyonları görüyoruz. Normalde bir programın çalışma mantığını madde madde işleyelim
- t1 anında ana fonksiyon başlar (m). Bu herhangi bir stored procedure veya fonksiyon ya da programlama dili üzerindeki herhangi bir fonksiyon başlangıcı da olabilir.
- t1 in başlangıcını aynı anda transaction başlangıcı kabul edelim.
- kod akışı devam ederken t2 anında f1 fonksiyonunu çağırıyoruz
- t3 anında f1 fonksiyonu bitmiş ve akış m fonksiyonuna dönmüş olacaktır.
- daha sonra t4 de bir fonksiyon daha çağrılıyor ve bitip tekrar m yani ana fonksiyona işlem dönüp devam ediyor.
- bu grafikteki kod akarken yapılan bütün değişiklikler de tn anında nihayete eriyor, yani commit veya rollback yapılıyor
- bu akışın normal bir transaction akışı olduğu düşünülürse akışın herhangi bir yerinde yapılan insert/update/delete işleminin tn anında akibeti belirleniyor. Yani commit atılırsa hepsi birden db üzerine yazılıyor. Rollback yapılırsa hepsi birden siliniyor. Tipik bir transaction
Şimdi f2 fonksiyonunun/prosedürünün otonom (autonomous) olduğunu düşünelim ve yeni grafiğimize bakalım.
Normal işlemi zaten biliyoruz, geçelim. Burada dikkat etmemiz gereken kısım f2 fonksiyonunu kırmızı işarete aldığım. Bunun otonom bir transaction olduğunu düşünürüyoruz. O zaman ne olur?
- İlk grafikten bildiğimiz üzere, bütün transaction içinde yapılan işlemlerin akibeti tn anında oluyordu.
- Otonom transactionda yani f2 de, tn anındaki karar geçerli değil.
- f2 kendi içinde bir transaction başlatır. Yani t4 anında kendi kendine çalışan ve m içindeki transactiona karışmayan bir transaction. Bu transaction da t5 anında biter. Burada olan insert/update/delete işlemleri burada kalır.
- f2 nin son anında (satırında) eğer bir commit veya rollback yoksa kod derlenmez.
Peki en güzel kullanma alanı ne olabilir? Benim aklıma loglama işlemi geliyor. Normal bir transaction içinde bir iş yapıldı ve o işin loglanması gerekiyor. Bunu direk transaction bünyesinde yaparsanız en sonunda rollback olma ve kayda düşmeme ihtimali var. Otonom yaptığınız zaman her şekilde kayıt altına almayı garantiliyorsunuz.
Örnekler çoğaltılabilir.
İyi çalışmalar.