Mssql Transaction Kullanımı

Hiç yorum yok
Merhaba Arakadaşlar

Mssql tarafında  transaction kullanımına bakıyor olacağız.Lafı fazla uzatmadan bakalım transaction nedir.

Transaction veri tabanında işlenilebilen en ufak veri yığınıdır

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.

Örnek Uygulama Bankada Hesabı olan İki Müşteriden Birinin diğerine Para transferinin gerçekleşmesi

Explicit Transaction :Kullanıcı Tanımlı(software tarafından)yazılan transactiondır.Amacımız birden fazla işi tekbir veri yığınıymış gibi ele alıp tüm işlemler başarılı ise işlemin veri tabanına yansımasını sağlamak olacak

Örnek veri tabanımız                              Transaction Tipleri

 1)Auto Complete Mode Transaction: işlemlerinden otomatik commitlenmesi

2)Implicit Mode Transaction: İşlemlerinden transaction başlatır ama kapatmaz tehlikelidir.Rollback tran tüm transactionların kapatılması durumunda İmplicit mode da yapılan işlemler tehlikeye girer

3)Explicit Mode Transaction: yazılımcının kendi acıp kapadığı işlemlerdir
 Tablomuz  yandaki gibi olup HesapID kolonu
 identity specification bölümünden identity increment ve identity  seed 1,1 olarak verilimiştir.Tablomuza iki adet hesap kaydı girelim ve birbirlerine havale yapmalarını sağlayacağımız Transaction işlemimizi gerçekleştirilim


Şimdi Transaction işlemlerimize bakalım.Anlatımı olduğunca basit ele almaya çalıştım.Database'ler bölümünden Bank veri tabanını seçip ilerleyelim

create proc HesapHavale
@gonderen int,@alankisi int,@mebla money
as
begin
    begin try
    begin tran havaleislemi--transaction işleminin başladığı kısım işlem commit olana veya rollback olana kadar devam eder
        Update Hesaplar set HesapBakiye= HesapBakiye-@mebla where HesapID=@gonderen
        declare @sayi int
        set @sayi=10/0 --hata verdirmek amaçlı yazdım.Divide by zero hatası için
        Update Hesaplar set HesapBakiye=HesapBakiye+@mebla where HesapID=@alankisi
        commit tran havaleislemi-- işlemlerin Onaylandığı Kısım
    end try
    begin catch
    rollback tran havaleislemi
    print 'Hata Meydana geldi'
    end catch
end


Kullanımı

exec HesapHavale 1,2,300


Son olarak Acık transactionların sayına bakalım

select @@TRANCOUNT --Acık transactionların sayını verir 

Uygulamayı indirmek için Tıklayınız





Hiç yorum yok :

Yorum Gönder

Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.