Oracle Ders 8 – Data Manipulation & Transaction Control – part 2
Levent Erguder 18 March 2013 Oracle DB
Bu dersimizde Transaction Control konusundan devam edecegiz.
Oracle DBde ,bir onceki derste gordugumuz DML (Data Manipulation Language) komutlarini (insert, delete,update) uyguladigimizda degisiklikler kalici olarak kaydedilmez.
Calistirdiginiz butun DML komutlari sonuclari kalici olarak kaydedilene kadar bir transaction(islem) kuyrugunda bekler.
COMMIT ve ROLLBACK
Commit komutu DML komutlarimizin kalici olarak kaydedilmesini saglar. Bu islemi ister SQL Devoperda simgesine tiklayarak yapariz ister komut olarak calistiririz.
DDL( Data Definition Language) komutlari (create table, alter table) ise otomatik olarak kalici olarak kaydedilir.Yani kendiliginden commit li 🙂
Oracle 11 G, 2000 SQL statement ina kadar commit islemi gerceklesmeden calismasina devam edebilir.
SQL Developer programimiz bize arayuz uzerinden kayit eklememizi saglar. Commit islemini resimde goruldugu gibi simgeye tiklayarak gerceklestirebiliriz.
Rollback komutu , DML komutlarini geri almaya saglar. Peki ne kadar geri alabiliriz ? 🙂 commit islemi yapilan en son duruma geri alir. bir nevi save-load durumu 🙂
Create Table, TRUNCATE table, alter table durumlarinda rollback ise yaramayacaktir.
SAVEPOINT ve ROLLBACK TO SAVEPOINT
Savepoint bir nevi oyunlardaki checkpointtir , yani bir nevi oyunda oldugumuzde en son savepoint / checkpointten devam edebiliriz. Oyun oynayan arkadaslar ne demek istedigimi cok rahat bir sekilde anlayacaktir 🙂
Daha onceki dersimizde olusturdugumuz ve ekledigimiz kayitlar.
Burada her bir kaydi guncelledik, ilk guncelleme isleminden sonra commit, ikincisinden sonra bir savepoint olusturduk.
guncelleme isleminden sonra tekrar kayitlarimiza bakalim.
Select * from acctmanager;
Gordugunuz gibi 3 kayit da guncel halde.
Gorgugunuz gibi ilk iki kaydimiz hala update li olarak duruyor. Savepoint e geri donduk ve 3.update islemimiz Oracle DB tarafindan geri alindi.
komutu ise son commit islemi yapilan noktaya geri gelmemizi saglar.
TABLE LOCKS (Tablo Kilitleri)
Birden fazla kullanici ayni anda ayni kaydi degistirmek isterse ne olacak ?
Table Locks, kullanicilarin yanlislikla birbirlerinin degisikliklerini override(ezmek) etmesinden kacinmak icin kullanilir. Oracle 11 G varsayilan olarak, row-level lock uygular. Yani diger kullanicilar, kilitlenen row lari degistiremezler.
Table Lock Shared mode veya Exclusive mode olabilir.
Shared Lock, diger kullanicilar tablodaki verileri gorebilir, fakat DDL islemi yapamaz ve kilitlenen row lari degistiremez.
Bir kullanici tabloyu acik bir sekilde kitleyebilir.
LOCK TABLE tablename in SHARE MODE;
Oracle11G , DDL islemleri uygulandiginda Exclusive Lock uygular. Diger kullanicilar alter islemi veya tablo icerigini update etme islemi yapamaz.
Bir tablo uzerinde Exclusive Lock varsa, diger kullanicilar Exclusive Lock veya Shared Lock uygulayamazlar.
Yine ayni sekilde bir kullanici bir tablo uzerinde Shared Lock hakkina sahipse , diger kullanicilar Exclusive Lock veya Shared Lock uygulayamazlar.
Kilitleme konusunda dikkatli olunmalidir, deadlock meydana gelebilir.Genellikle Oracle11 G, deadlocklari sezer ve hata mesaji dondurur , hata mesaji dondugunde ayni zamanda kilit de acilir. Commit, Rollback veya Exit komutu ile kilit acilabilir.
Transcational Control ile ilgili olarak soyleceklerim simdilik bu kadar.
Herkese Bol Javali Gunler.
Be an oracle man,import java.*
commit Exclusive Lock Exit oracle db rollback row-level lock SAVEPOINT SELECT ... FOR UPDATE Shared Lock table locks Transcational Control Language