arşiv

0, 2017 için arşiv

SQL Transactions

Çarşamba, 29 Mar 2017 yorum yok
TRANSACTIONS
 
Transaction’lar, aynı anda birden çok işlemin yapıldığı durumlarda, bütünü oluşturan parçalardan en az birinde hata meydana gelirse bütün işlemleri geriye almamızı sağlayan ifadelerdir.
 
Transaction ifadelerini en yaygın olarak 2 yolla oluşturmak mümkündür: Bunlardan ilki, Auto Commit Transaction; ikincisi ise Explicit Transaction’dır.
 
 Auto Commit Transaction
·         Hiçbir transaction modu tayin edilmediyse SQL Server bu modda çalışır.
·         Auto commit modunda her bir batch bir transaction bloğu olarak ele alınır.
·         Batch içerisinde bir sorun olursa da, SQL Server otomatik olarak bütün batch’i geri alır yani rollback eder.
·         INSERT,UPDATE,DELETE gibi diğer komutlardan ayrı olarak gönderilen ifadeler SQL Server tarafından otomatik olarak transaction içerisinde paketlenir. Bu tek ifadeli transaction’lar, ifade başarılı olduğunda otomatik olarak commit edilir(onaylanır) ya da runtime hatası neticesinde otomatik olarak rollback edilir(geri alınır).
 
Explicit Transaction
·         Kullanıcının TCL komutları (begin, commit,rollback) kullanarak başlattığı transaction’lardır.TCL, T-SQL'in alt kümesidir.
 
            
 

·         Batch’lerde runtime hatası olduğunda, örneğin; 2 tabloya aynı anda veri girişi yapmak istediğimizi düşünelim. Bir tanesine giriş oldu fakat sonrasında runtime hatası verdi ve ikincisine giriş olmadı.
 
   insert into … values …
   insert into … values …
   GO
   
   Bu durumda yazdığımız iki insert ifadelerini kullanıcı tanımlı transaction’ın içine sokarak bu olumsuzluktan kurtulabiliriz.  (İlgili örneğe en aşağıda ulaşabilirsiniz).
 
BEGIN TRANSACTION
·         Transaction işlemini başlatır. İşlem başarılıysa bitirmek için COMMIT TRANSACTION / COMMIT TRAN, başarısızlık durumunda bitirmek için de ROLLBACK TRANSACTION / ROLLBACK TRAN kullanılır.
·         İç içe transaction’larda eğer dış kısımdaki transaction rollback olduysa (geri alındıysa) içteki transaction da işlem görmüşse bile rollback edilir.
·         Transaction’lar COMMIT TRANSACTION ya da ROLLBACK TRANSACTION görünceye kadar devam eder ya da başlangıçtaki bağlantı kesilene kadar yani SQL Server otomatik olarak transaction’ı rollback edene kadar sürer.
 
COMMIT TRANSACTION
Başarılı olan transaciton’ı veritabanına kaydeder.
 
ROLLBACK TRANSACTION
·         Başarısız bir transaction’ın sonunda ROLLBACK komutunu kullanırız.
·         Transaction sırasında meydana gelen değişiklikleri geri almada kullanılır. Örneğin, insert, delete, update yapılan satırlar ya da create edilmiş objeler gibi.
·         CATCH bloğu içerisinde kullanılabilir.
·         Geri almadan önce (rollback), XACT_STATE fonksiyonunu kullanarak transaction’ın durumunu öğrenebiliriz. Bu CATCH bloğu içerisindeki hatalardan kaçınmamızı sağlar.
 
XACT_STATE Sonucu   Tanımı
0              Aktif kullanıcı transaction’ı yok.
1              Aktif, yürütülmekte olan transaction mevcut
                   -1              Aktif kullanıcı transaction mevcut ama hatalı. Transaction sadece geri alınabilir.
 
XACT_ABORT
Hata meydana geldiğinde SQL otomatik olarak geri alma işlemi yapmaz. Geri almak için ROLLBACK ifadesi kullanılır ya da XACT_ABORT devreye sokulur. XACT_ABORT ifadesi SQL Server runtime hatası verdiğinde yürütülmekte olan transaction’ın otomatik olarak geri alınmasını sağlar.
Default olarak XACT_ABORT kapalıdır. Bunu ayarlamak için SET komutu kullanılır.
 
       
 
 
Batch’lerden Oluşan Transaction
 
Transaction Örneği:
 
BEGIN TRY
   BEGIN TRANSACTION
      INSERT INTO Siparisler (musteriID, personelID, siparisTarihi) VALUES (1,1,’2015-08-14’);
      INSERT INTO SiparisDetay (siparisID, urunID, birimfiyat, adet) VALUES (2,4,50,150);
   COMMIT TRANSACTION;
END TRY
BEGIN CATCH
   SELECT ERROR_NUMBER(), ERROR_MESSAGE();
ROLLBACK TRANSACTION;
END CATCH;
 
Burada TRY bloğu içinde, INSERT ifadesi BEGIN TRAN ve COMMIT TRAN ifadeleri tarafından sarılmıştır. Bu INSERT ifadesinin tamamıyla başarıyla gerçekleşmesini ya da tamamıyla başarısız olmasını sağlar. Eğer herhangi bir runtime hatası vermezse, transaction gerçekleşir ve iki insert ifadesinin sonucu veritabanına işlenir. Eğer birinci INSERT işlemi sırasında hata olursa execution CATCH bloğa geçer; ikinci INSERT işlemini atlayarak CATCH bloğu içindeki ROLLBACK ifadesi transaction’ı sonlandırır. Eğer ikinci INSERT işlemi sırasında hata olursa execution CATCH bloğa geçer. İlk INSERT komutu başarıyla tamamlandığından ve satırlar Siparisler tablosuna eklendiği için ROLLBACK ifadesi başarılı olan INSERT işlemini geri alır.
 
Categories: SQL Hakkında Tags:

Ülke Bayrakları Hakkında

Cuma, 24 Mar 2017 yorum yok
Categories: Genel Tags:

MVC ATTRİBUTE KULLANIMI

Cumartesi, 18 Mar 2017 yorum yok

MVC Attribute aşağıdaki gibi kullanabilirsiniz.

Filter  Interface  Default Implementation

 Authorization Filter  IAuthorizationFilter AuthorizeAttribute
 Action Filter  IActionFilter ActionFilterAttribute
 Result Filter  IResultFilter ActionFilterAttribute
 Exception Filter  IExceptionFilter HandleErrorAttribute

Authorization : Diğer filtreler ve Action metodlardan önce çalışmaktadır.Controller ya da Controller içindeki Action metoda erişim kısıtlamak için kullanılır.
Exception : Hata durumlarında çalışan filtredir.
Action : Herhangi bir Controller sınıfında bulunan Action metottan önce ya da sonra çalışır.
Result : Action Result çalıştırılmadan önce ya da çalıştırıldıktan sonra çalışır.

Kaynak: https://cemelma.wordpress.com/2014/09/04/mvc-attribute-kullanimi/

Categories: MVC Tags: