Transaction kelimesinin Türkçe karşılığı
işlemdir. Aslında adından da anlaşılacağı üzere SQL Server üzerinde yapılan
işlemlerin tümüne verilen addır diyebiliriz. Fakat bu noktada SQL Server'ın
arka plandaki çalışma mantığını anlamak ve gönderilen transactionları ne
şekilde karşıladığını, kaç çeşit transaciton yapısı olduğunu bu yazıda ele alacağız.
Transaction yapısını en basit hali ile ifade etmeye çalışırsak aslında daha küçük parçalara ayrılamayan işlem bloğudur denilebilir. Transaciton yapısını korumak için temel 4 ana kural vardır. Bu 4 kuralın genel olarak adına ACID denilmektedir. ACID; Atomicity , Consistency, Isolation ve Durability nin baş harflerinden oluşmuştur. Şimdi aşağıda bu 4 temel maddeyi inceleyelim:
Transaction yapısını en basit hali ile ifade etmeye çalışırsak aslında daha küçük parçalara ayrılamayan işlem bloğudur denilebilir. Transaciton yapısını korumak için temel 4 ana kural vardır. Bu 4 kuralın genel olarak adına ACID denilmektedir. ACID; Atomicity , Consistency, Isolation ve Durability nin baş harflerinden oluşmuştur. Şimdi aşağıda bu 4 temel maddeyi inceleyelim:
Atomicty: Bölünmezlik olarak nitelendirilir.
Başlatılan bir transaction bloğu çalıştıktan sonta herhangi bir şekilde
bölünemez ya da işlem yarım kalamaz kuralaını ifade eder. Ya başaltılan işlem
başarılı olarak tamamlanalarak sonlanır ya da bir sorun oluşması haline en başa
dönülmesi gerekmektedir.
Consistency: Tutarlılık
olarak nitelendirilir. Transaciton bloğunun içerisinde bulunan ara işelmler
arasında yaşanabilecek herhangi bir bozukluk data tarafında bozukluğa sebep
olacağı için veri bazında tutarsızlığa sebep olabilir. Bu durumda transacition yapısının
tutarlılığı sağlaması gerekmektedir.
Isolation: Transactionlar arasındaki İzolasyonu
temsil eden kuraldır. Database de bulunan diğer farklı transactionlar
veritabanı yapısı içerisinde birbirinden bağımsız olarak ele alınmalıdır. Ve
transaction içerisindeki ara işlemlerden ziyade transaction diğer
transacitionlar tarafından bir bütün olarak görülmelidir.
Durability: Dayanıklılık kuralını temsil eder.
Transactionlar çalışma esnasında meydana gelen problemlere karşı dayanaklı
olabilmelidir ve bunlardan etkilenmemesi gerekir.Bu problemler işletim
sistminin çökmesi, ana kartın yanması gibi durumlar olabilir. İşlem sırasında
meydana gelen beklenmedik bir problem sırasında başarılı şekilde rollback
olayını sağlayabilmesi gerekir.
SQL Server da Transactionların Çalışma
Mantığı
SQL Server çalışma mantığı olarak eğer bir
kayıt üzerinde değişiklik yapacaksa öncelikle kayıtların bulunduğu ilgili
sayfaları HDD'den RAM'e alınıp alınmadığını kontrol eder. Eğer RAM de
bulunmuyorsa öncelikle ilgili Data Page'ler Buffer Cashe'e çıkartılır. Daha
sonrada ilgili kayıtlar üzerinde değişiklikler yapılır. Fakat bu yapılan
değişikliler hemen HDD'ye yansıtılmaz. Tam bu zaman aralığında değişiklik
yapılan kayıt RAM ve HDD üzerinde farklı değerlere sahiptir. Bu gerçekleşen
olaya DIRTY PAGE denilmektedir.
SQL Server da ki Transaction Çeşitleri
SQL Server da toplam 3 çeşit Transaction
vardır.
o
Explict
Transaction
o
Implict
Transaction
o
AutoCommit
AutoCommit Transaction
SQL Server default olarak AutoCommit olarak çalışmaktadır. Her bir işlem
ayrı ayrı ele alınır. Örneğin iki farklı update işlemini art arda
çalıştırdığınızda, ilkinde oluşan bir hata ikincisinin çalışmasını
etkilemeyecektir ve ikinci işlem iptal edilmeden update işlemini sağlayacaktır.
Bu modda SQL Server her bir işlemi ayrı ayrı olarak ele alır.
Explict Transaction
AutoCommit de her bir işlemin ayrı ayrı el alındığını söylemiştik. Fakat
bazen ihtiyaçlar dâhilinde farklı birkaç işlemin birleşimi tek bir işlemi
oluşturmaktadır ve bu işlemlerin herhangi birinde gerçekleşecek bir hata
aslında nihai sonucu etkileyeceği için en başa dönülmesi gerekir ki developer bunun
autocommit modunda handle edemeyecektir. Bu noktada developer Explict
Transaction ile kendi transaction bloğunu tanımlayarak ilgili alt işlemleri tek
bir transaction da toplayabilir. Bunu yaparken de begin tran ile transaction'nı başlatıp commit
tran ve rollback ile transaciton'ı sonlandırır. Eğer transaciton başarılı bir
şekilde sonlanırsa commmit tran ile değişiklikler disc'e kayıt edilmiş olur ya
da işlem sırasında herhangi bir problem yaşanırsa try cacth bloğuna düşen hata
ile en başa dönülür. (@@Error değişkeni ilede ata olup olnumadğı kontrol
edilerek buradan da rollback ile dönülebilir. Ama her bir işlem sonunda @@error
ile kontrol edilmesi gerekeceği için Try catch bloğu ile hata kontrolü sağlamak
çok daha kolay olacaktır.) Bir diğer husus ise Begin tran ifadesinden sonra
işlem sonunda rollhback ya da commit ile transaciton'nın sonlandırlması
unutulamamalıdır. Aksi halde transaction sonlanmayacak ve sistem kaynakları
gerekesiz yere kullanılmaya devam edecektir.
Save Point nedir ?
Eğer çok uzun transactionlar üzerinde
çalışıyorsak save points'ler ile herhangi bir problem durumunda en başa dönmek
yerine bizim belirlediğimiz alanlara kadar geri dönme işlemini sağlayabiliriz.
Not:@@trancount
değeri sistemde anlık olarak açık olan transaction ları bize göstermektedir.
Begin Tran
--Alt işlemler
Commit tran // Rollback
Implicit Transaction
Implict_Transaciton On ifadesini
kullanarak truncate table, alter table, select, create, revoke, delete,
open, drop,insert, fetch ve update ifadelerinden sonra transaciton Sql
Server tarafından otomatik olarak başatılır. Fakat bu durumda bizim commit yada
rollback ifadeleri ile kapatmamız gerekir. Implict_transaction off ile SQL Server default özelliği olan
AutoCommit moda geri döner. Oracle da ise deafult olarak Implict Transaction
kullanılmaktadır.Bir sonrakiş yazıda örneklerle konuyu çeşitlendirmeye çalışacağız.
0 yorum :
Yorum Gönder