Oracle Ders 8 – Data Manipulation & Transaction Control – part 2

Merhaba Arkadaslar,
Bu dersimizde Transaction Control konusundan devam edecegiz.

  • COMMIT
  • ROLLBACK
  • SAVEPOINT
  • LOCK TABLE

komutlarindan bahsedecegim.

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.

oracle8

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 🙂

oracle8_1

Daha onceki dersimizde olusturdugumuz ve ekledigimiz kayitlar.

oracle8_2

Burada her bir kaydi guncelledik, ilk guncelleme isleminden sonra commit, ikincisinden sonra bir savepoint olusturduk.

guncelleme isleminden sonra tekrar kayitlarimiza bakalim.

Select * from acctmanager;

oracle8_3

Gordugunuz gibi 3 kayit da guncel halde.

ROLLBACK TO ONE;

komutunu calistiralim..

oracle8_4

Gorgugunuz gibi ilk iki kaydimiz hala update li olarak duruyor. Savepoint e geri donduk ve 3.update islemimiz Oracle DB tarafindan geri alindi.

ROLLBACK;

 komutu ise son commit islemi yapilan noktaya geri gelmemizi saglar.

oracle8_5


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.

LOCK TABLE

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. CommitRollback 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.*
Levent Erguder

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *