- Katılım
- 3 Şubat 2014
- Mesajlar
- 1,744
- Tepkime puanı
- 0
- Puanları
- 0
Bazen , birden fazla işlem bir bütünün parçasıdır.Bu işlemlerden bir tanesi bile gerçekleşmezse , bütün işlemler başarısız kalabilir.
Bu yüzden bu tür işlemlerin tamamını , tek bir bütün olarak ele alınması gerekmektedir.İşte bu tarz , parçalanamayan(atomicity) işlemlerin oluşturduğu tek bir işleme transaction denir.
Özet bir ifadeyle transaction , daha küçük parçacıklara ayrılamayan işlem bloğu demektir.
Bir transaction bloğu , SQL Server tarafından şu şekilde ele alınır.
Bir banka uygulamasını düşünelim.Bir kullanıcı başka bir kullanıcıya havale yaptığında ne olur.Öncelikle havale yapanın hesap bilgilerinden havale yaptığı miktar düşülür.Ardından alıcının hesabına bu miktar eklenir ve havale gerçekleşmiş olur.
Peki ya şöyle bir durum olursa , gönderenin hesabından para düşüldüğü anda ,elektirik kesilirse yada başka bir sebebten dolayı alıcının hesabına para eklenmezse ne olur ? Tabiki de çarşı karışır.Ortaya kime ait olduğu bilinmeyen bir para çıkar.
İşte bu gibi durumlarda transaction kullanılmalı ki , gönderici parayı gönderir fakat alıcı tarafında alma işlemi gerçekleşmezse , transaction sonlandığı anda , başarısız durumu olduğu için , göndericinin parasını hesabına geri eklesin.
Şimdi örneğimize uygun bir Harici Transaction kodlayalım.
Harici Transaction , programcı tarafından başlatılan ve sonlandırılan işlem bloğu için kullanılan bir terimdir.BEGIN TRAN ile başlatılıp , ROLLBACK TRAN veya COMMIT TRAN ile sonlandırılan bloktur
Önce bir "tblHesap" tablosu oluşturup içerisine iki adet veri ekleyelim.
[/CODE]
şimdi ise yukdarda anlattığım örnekteki işlemi yapacak bir procedure tanımlayalım ve transaction ile destekleyelim.
Not: derlerken , önce tablo oluşturma ve ekleme kodlarını , sonra procedür' kodlarını derleyin.Çünkü "CREATE PROC" ifadesinin üzerinde bir komut olmamalı
Bu yüzden bu tür işlemlerin tamamını , tek bir bütün olarak ele alınması gerekmektedir.İşte bu tarz , parçalanamayan(atomicity) işlemlerin oluşturduğu tek bir işleme transaction denir.
Özet bir ifadeyle transaction , daha küçük parçacıklara ayrılamayan işlem bloğu demektir.
Bir transaction bloğu , SQL Server tarafından şu şekilde ele alınır.
- Transaction bloğu başlatılır.Bu işlem , SQL server tarafından otomatik olarak yada kullanıcı tarafından BEGIN TRANSACTION ile başlatılabilir.
- Transaction bloğu arasında yapılan her işlemin başarılı olup olmadığına bakılır.Başarılı olmadığı anda geri alım işlemine(ROLLBACK) ,başarılı ise bir sonraki işleme geçilir.
- Tüm işlemler tamamlandığında , COMMIT ile yeni hali sabitlenir.Başarısız bir sonuç olursa ROLLBACK ile en başa alınır ve bilgiler ilk hali ile sabitlenir.Her iki durumda , Transaction'ı bitirir.
Bir banka uygulamasını düşünelim.Bir kullanıcı başka bir kullanıcıya havale yaptığında ne olur.Öncelikle havale yapanın hesap bilgilerinden havale yaptığı miktar düşülür.Ardından alıcının hesabına bu miktar eklenir ve havale gerçekleşmiş olur.
Peki ya şöyle bir durum olursa , gönderenin hesabından para düşüldüğü anda ,elektirik kesilirse yada başka bir sebebten dolayı alıcının hesabına para eklenmezse ne olur ? Tabiki de çarşı karışır.Ortaya kime ait olduğu bilinmeyen bir para çıkar.
İşte bu gibi durumlarda transaction kullanılmalı ki , gönderici parayı gönderir fakat alıcı tarafında alma işlemi gerçekleşmezse , transaction sonlandığı anda , başarısız durumu olduğu için , göndericinin parasını hesabına geri eklesin.
Şimdi örneğimize uygun bir Harici Transaction kodlayalım.
Harici Transaction , programcı tarafından başlatılan ve sonlandırılan işlem bloğu için kullanılan bir terimdir.BEGIN TRAN ile başlatılıp , ROLLBACK TRAN veya COMMIT TRAN ile sonlandırılan bloktur
Önce bir "tblHesap" tablosu oluşturup içerisine iki adet veri ekleyelim.
Kod:
[CODE][B]CREATE TABLE tblHesap(
HesapNo CHAR(10) PRIMARY KEY NOT NULL,
isim VARCHAR(55),
soyad VARCHAR(55),
sube INTEGER,
bakiye MONEY
)
INSERT tblHesap
VALUES ('10000001','Eda','Şahin','511',3000)
INSERT tblHesap
[/B][/B][/FONT][/COLOR][/B][/B][/B][/B]
şimdi ise yukdarda anlattığım örnekteki işlemi yapacak bir procedure tanımlayalım ve transaction ile destekleyelim.
Kod:
[B]CREATE PROC SP$havale (
@aliciHesap CHAR(10),
@gondericiHesap CHAR(10),
@miktar MONEY
)
AS
BEGIN TRY
BEGIN TRANSACTION
UPDATE tblHesap
SET bakiye=bakiye-@miktar
[/B][B][B] WHERE HesapNo=@gondericiHesap
[/B][/B]