Bir transaction nasıl sonlanır, nedir ve neden önemlidir sorularına cevap arayacağız. Öncelikle “transaction” kelimesini bundan sonra “işlem” olarak analım. Bir işlemi SQL sorgusu yazarak başlatabiliriz ve commit veya rollback göndererek ya da bir DDL komutu çalıştırarak sonlandırabiliriz. Unutmadan hemen belirteyim, bir işlem içerisindeyken bilinçli olarak çıkış yaparsanız yarıda bıraktığınız işlem commit edilir ancak isteğiniz dışında bir sonlandırma olursa da rollback ile işleminiz sonlandırılır. Bir örnek;
01
$ sqlplus ogan/password
02
03
SQL*Plus: Release 10.2.0.4.0 - Production onTue Dec28 12:34:00 2010
Oracle Database10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
12
Withthe Partitioning, OLAP, Data Mining andRealApplication Testing options
13
14
SQL> selectcount(*) fromogan_deneme;
15
16
COUNT(*)
17
----------
18
252
–> Yaptığımız değişiklik commit edilmiş ve işlemimiz sonlandırılmış. Bu noktada belirtmeliyim ki bu bir OCA sertifikasyon sorusu olarak karşınıza çıkabilir. Bir de diğer yönden bakalım?
01
SQL> insertintoogan_deneme
02
2 select* fromogan_deneme;
03
04
252 rowscreated.
05
06
SQL> selectcount(*) fromogan_deneme;
07
08
COUNT(*)
09
----------
10
504
–> Bir veri girişinde bulunduk ancak henüz commit veya rollback göndermedik. Tam bu sırada işgüzarlık yapıp yemeğe gittiğimizi düşünelim. Aksi bir veritabanı yöneticisi bunun farkına vardı ve bizim henüz commit veya rollback göndermediğimiz işlemimizi sonlandırmak istedi (çok kızgın);
01
$ sqlplus / assysdba
02
03
SQL*Plus: Release 10.2.0.4.0 - Production onTue Dec28 12:38:52 2010
–> Bağlantımızı sonlandırdı! Aradan döndüğümüz ise göreceğimiz görüntü;
01
SQL> selectcount(*) fromogan_deneme;
02
selectcount(*) fromogan_deneme
03
*
04
ERROR atline 1:
05
ORA-00028: your session has been killed
06
07
SQL> conn ogan/password
08
Connected.
09
SQL> selectcount(*) fromogan_deneme;
10
11
COUNT(*)
12
----------
13
252
–> Çok kötü! Yaptığımız ama commit etmediğimiz değişiklik rollback edilerek, bağlantımızı kaydetmeden önceki durumuna getirilmiş. Olsun diyerek devam ediyoruz;
01
SQL> insertintoogan_deneme
02
2 select* fromogan_deneme;
03
04
252 rowscreated.
05
06
SQL> savepoint ogan_1;
07
08
Savepoint created.
09
10
SQL> insertintoogan_deneme
11
2 select* fromogan_deneme;
12
13
504 rowscreated.
14
Ders Sahibi;
Bilgisayar Dershanesi
Yorumlar
Yorum Yapabilmek İçin Üye Girişi Yapmanız Gerekmektedir.