T-SQL'de Transaction Yapısı ve Kullanımı

Eyl 08, 2013

"Transaction", daha küçük parçalara ayrılamayan en küçük işlem yığınına denir. Belirli bir grup işlemin arka arkaya gerçekleşmesine rağmen, işlemlerin seri ya da toplu halde değerlendirilip hepsinin düzgün bir şekilde ele alınması gerektiğinde kullanılır. "Transaction", prensip olarak ya bütün işlemleri gerçekleştirir ya da hiçbirini gerçekleştirmez.  İşlemlerden biri dahi başarısız olursa, bu prensip nedeniyle hiçbir işlem olmamış kabul edilir; ancak tüm işlemler başarılı olduğunda" transaction", içinde gerçekleşen tüm veri değişikliklerini onaylamış demektir.

Bahsedilen işlemler örneğin veri tabanının içindeki bir tablodan veri silinmesi, silinen verinin başka bir tabloda eklenmesi ya da güncelleştirilmesi gibi işlemlerdir. Bu işlemler birbirleriyle ilintili ve ardışık işlemler olduğu için bir tanesinin gerçekleşmemesi demek çok önemli verilerin kaybına neden olmak demektir.  Bu tarz sorunlarla karşılaşmamak için son işlem gerçekleşinceye kadar tüm işlemler beklemelidir, eğer bir hata oluşmazsa tüm işlemler geçerli kabul edilir ve sona yansır. Bu işlemler sırasında veriler üzerindeki değişikliklerin de tutarlı olması, birbirlerini tamamlayıcı nitelik taşımaları gerekmektedir. Bu gereklilikleri sağlayabilmek amacıyla "transaction" kavramı ortaya çıkmıştır. Veritabanı uygulamaları geliştirilirken bu tip iş parçacıklarının "transaction" bloklarının içine alınması daha güvenli işlemler gerçekleştirilmesini sağlar.

"Transaction" bloğundaki işlemlerin hepsi başarılı olduğunda "Transaction" Commit (Onaylama) komutu çalışır ve değişiklikler veritabanında gerçekleşmiş olur; ancak bir hata varsa işleyiş bozulur ve "transaction" Rollback (Geridönüş) komutu çalışır, bu şekilde tüm işlemler geri alınır ve en başa dönülür. Böylece veri kaybına karşı bir çeşit koruma mekanizması oluşturulmuş olunur.

Aşağıdaki şekil "transaction" mekanizmasını anlatmaktadır:



Şekilde görüldüğü gibi tüm işlemlerin gerçekleşip "commit" komutunun çalıştırılabilmesi için hepsinin başarılı olması gerekmektedir. Bir tanesi bile hatalı olduğunda "rollback" komutu çalışır ve gerçekleştirilmesi istenilen tüm işlemler iptal edilir.

"Transaction" aşağıda tablolar ve kodlar kullanılarak adım adım anlatılmıştır:

  1. Kolon isimleri ve özellikleri aşağıdaki gibi bir tablo oluşturulur.

     

  2. Oluşturulan tabloya kullanılacak olan veriler girilir.

  3. Belirlenen kurala uygun bir "transaction" yazılır. Aşağıdaki kod örneğinde "transaction" sıra sayısı kuralına uyulmadığı için "commit" kodu çalışmaz, "rollback" komutu çalışır ve istenilen hiçbir değişiklik tablo üzerinde yapılamaz.

    BEGIN TRAN 
    UPDATE deneme
    SET isim = 'isim5'
    WHERE id = 'DE38C434-5D30-4B28-81A8-5B1A191C1501'
    UPDATE deneme 
    SET isim = 'isim6'
    WHERE sehir = 'sehir2'

     

    IF @@ROWCOUNT = 2 
     COMMIT TRAN
    ELSE

     ROLLBACK TRAN

  4. Aşağıdaki kod örneğinde olduğu gibi istenilen kural uygunsa, tablo için istenilen değişikliklerin hepsi gerçekleştirilir.

    BEGIN TRAN

    UPDATE deneme
    SET isim = 'isim5'
    WHERE id = 'DE38C434-5D30-4B28-81A8-5B1A191C1501'
    UPDATE deneme
    SET isim = 'isim6'
    WHERE sehir = 'sehir2'

    IF @@ROWCOUNT = 1 
      COMMIT TRAN
    ELSE

     ROLLBACK TRAN

  5. Tablonun yeni şekli aşağıdaki gibi elde edilir. isim1 ve isim2 yerine sırasıyla yazdırılmak istenilen isim5 ve isim6 yazdırılır.