Transaction ve İzolasyon Seviyeleri

Merhaba Arkadaşlar bu konumda sizlerle SQL Transaction ve Izolasyon seviyelerinden bahsetmek istiyorum. Öncelikli olarak Transaction nedir ? Transaction Niçin kullanılır ? bu soruları açıklayarak  Transactionlarda izolasyon seviyelerine geçeceğim.

Transaction NEDİR ? Niçin Kullanılır.

Transaction Ard ardına yapmamız gereken işlemler için. Kullanılır. Örneğin. Bankan sistemlerindeki banka havale işlemini düşünelim. Bir kullanıcının bakiye alanındaki paradan hava ücreti düşülüp diğer kullanıcıya aktarılması gerekiyor.

Sonuç olarak yazılan her uygulama bir insan işidir. Oyüzden sorunlar ve hatalarla karışlaşıla bilir. Kullancının hesabından parayı çektiğiniz an. Elektirikler Kesildi  ( Biz bahsız bedeviyizdir. Kesinlikle Olur böyle şeyler 🙂 ) ve çekilen para diğer kullanıcının hesabına aktarılamadı yani arada bir para kaybı meydana geldi. İşte bu tip bir sorunla karşılaşmamak için transaction kullanıyoruz.

Transaction ard ardına yapılan işlemlerin  hepsinin doğru bir şekilde tamamlandıktan sonra sisteme uygulanamasını sağlar. İşlemlerin birin dahi bir hata meydana gelse diğer işlemleri uygulamadan işlemi durdurur. Bu sayede veri güvenliği ve tutarlığı korunmuş olur.

Transaction = Ya hep, Ya hiç

Transaction Kullanımı

Bu işlemi test etmek için Batan bank isteminde bir veri tabanı oluşturuyoruz. Aşağıda görüldüğü gibi hesap isminde bir tablo ekleyip gerekli olan alanları oluşturuyoruz.

Oluşturmuş olduğumuz bu tabloya veri giriyoruz.

Verileri girdikten sonra hava işlemini yapmak için bir stor procedur yazalım. (Stor Procedur Kullanımı ile ilgili Ayrıntlı Bilgi için Tıklayınız.)

Yazmış olduğumuz bu proceduru uyguladıktan sonra çalıştırıyoruz. ( Uygulama işlemi için yazmış olduğumuz Stor Proceduru seçip F5 yapınız. )

İşlem Başarı ile gerçekleşti. 2 kayıt etkilendi.  Eğer İşlem Sırasında bir sorun meydana gelmiş olsa idi aşağıdaki gibi bir ekranla karşılaşılacaktı ve hiç işlem tamamlanmayacaktı.

Transaction ile ilgili Yazaklarım bu kadar arkadaşlar. Gelelim şimdi transactionlarda izolasyon seviyelerine.

Bir Sistemi Malumunuz olarak tek kişi kullanmaz bu birden fazla kişi kullanır. Bu kullanım sırasında aynı anda aynı tabloyu etkileyen işlemlerle karşılaşıla bilir. İşte bu tip durumlarda transactionların nasıl davranması gerektiği ile ilgili işlemlere transaction seviyeleri denir.

Eş Zamanlı Çalışan transactionlarda Oluşa bilecek durumlar 3 tanedir. Phantoms, Non-Repeatable Read, Dirty Read.

Phantoms

2 Tane Transactionumuzun olduğunu ve bunların eş zamanlı olarak çalıştığını düşünelim. Transaction1 veri tabanındanki bir veri kümesini çekiyor. Transaction2 ise veri eklemesi yapıyor ve uygulanıyor(Commit). Transaction1 tamamlanmadan veri eklemsi oluduğu için bu yeni eklenen satırlar transaction1 için hayalet satır olarak anlandırlır. Bu olaya Phantoms denir.

Non-Repeatable Reads

Yine eş zamanlı 2 tane Transactinumuz olsun. Transaction1 bu sefer sadece tek bir kayıt çekip onları görüntülesin. Transaction2 ise bu transaction1’in seçmiş oluduğu veriyi düzenlesin ve transaction uygulansın(commit). Transaction1 Seçmiş olduğu veriyi tekrar kontrol ettiğinde ortaya çıkan bilinmedik. Değişkliğie Non-Repeatable Reads denir.

Dirty Read

Bu durum Phantoms ve Non-Repeatable Read durumlarına göre biraz daha farklıdır. Eş zamanlı olarak çalışan Transaction’lardan birisi, diğerinin okuduğu aynı veriler üzerinde değişiklik yapar. Aynen Non-Repeatable Read e neden olan durumda olduğu gibi. Ancak önemli bir fark vardır. Değişiklik yapan Transaction Commit edilmeden, diğer Transaction aynı satırıları tekrar okur ve değişiklikleri görür. Bu andan sonra, değişiklikleri yapan Transaction yaptığı güncellemeleri RollBack ile geri alır. İşte bu noktada, verileri okuyan Transaction’ da geri alınmış (RollBack) yani veri tabanına yansıtılmamış değişiklikler halen daha var olacaktır ki aslında bu değişiklikler mevcut değildir. İşte bu durum Dirty-Reads olarak adlandırılır.

“Transaction ve İzolasyon Seviyeleri” için bir cevap

  1. huseyin dedi ki:

    ahmet bey merhaba sorum şudur, procedur de herhangi bir sıkıntı yok fakat biz bu işlemi insert yaptığımızda hareketlerde iki kayıt görünmesini istiyoruz. birinde girdiği diğerinde ise çıktığının görünmesi lazım. bu işlem nasıl olacaktır.bir gönderen diğer alan biri giren diğeri çıkan bunları ayrıca aspx ortamında nasıl düzenlenmesi gerekmektedir. teşekkürler

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir