Transaction - enverbagci.net

advertisement
Transaction
 Bir veya daha fazla SQL ifadesinden meydana gelen
tek bir işlemdir. SQL ifadelerin tamamı bir bütün
olarak düşünülür ve daha küçük iş parçalarına
ayrılamaz.
 Bir transaction içerdiği SQL ifadelerini tamamını
gerçekleştirir veya hiçbirini gerçekleştirmez.
İşlemlerin tamamı gerçekleşmediği sürece işlemlerin
hiçbiri gerçekleşmemiş sayılır.
Şekilde görüldüğü gibi tüm işlemlerin gerçekleşip "commit" komutunun çalıştırılabilmesi için
hepsinin başarılı olması gerekmektedir. Bir tanesi bile hatalı olduğunda "rollback"
komutu çalışır ve gerçekleştirilmesi istenilen tüm işlemler iptal edilir.
Örnek
 Bir banka örneği ile transaction yapısını açıklayalım.
Bir müşteri kendi hesabından başka bir hesaba 1500
TL para transferi yapıyor. Bu işlemin iki adımı vardır.
İlk adım kişinin hesabından transfer edilcek para,
ikinci adım ise diğer kişinin hesabına transfer edilecek
olan tutarın eklenmesidir. Bu işlemleri gerçekleştircek
SQL ifadeleri:
 update hesaplar set bakiye=bakiye-1500
where hesap_no=1453
 update hesaplar set bakiye=bakiye+1500
where hesap_no=1454
Örnek(Devamı)
Bu işlemlerden birincisi gerçekleştikten sonra herhangi bir
sorundan dolayı ikinci işlem gerçekleşmezse hesapla ilgili
ciddi sorunlar yaşanabilir. Bu tür sorunları engellemek
için transaction yapıları kullanılır.Transaction her iki
işlemide tek bir işlem olarak ele alacağı için herhangi
birisi gerçekleşmediği zaman diğer gerçekleşen
işlemleride yok sayacaktır. Yani gerçekleşen işlem geri
alınacaktır(Bu işlem rollback olarak adlandırılır.).
Eğer işlemlerin tamamı sorunsuz bir şekilde gerçekleşirse
tüm işlemleri kalıcı hale getirecektir. (Bu işlem commit
olarak adlandırılır. )
Transaction
Transaction yapıları transaction logları adı verilen yöntemi
kullanılır. Bu yöntemle bir transaction başladıktan sonra
SQL ifadeleri için kullanılan verileri tutan sayfalar diskten
hafızaya aktarılır ve SQL ifadesiyle istenilen değişiklikler
hafıza üzerindeki bilgilerde yapılır. Daha sonra yapılan
değişikliklerin aynısını içeren transaction logları diske
yazılır.
Transaction işlemi başarılı ise COMMIT ifadesi ile
değişiklikler kalıcı hale getirilir. Eğer işlemler esnasında
bir sorun olmuşsa ROLLBACK ifadesi ile veriler ilk baştaki
değişiklik yapılmış haline geri döner.
Transaction hazırlanırken dikkat
edilcek hususlar :
 Transaction içerisindeki SQL ifadeleri veriler üzerinde
değişiklik yapabileceği için veritabanı yöneticisi
kullanıcılar için gerekli izinleri vermelidir.
 Transaction işlemi veri veya veritabanı nesneleri
üzerinde değişiklik yapacak SQL ifadeleri içerebilir.
(INSERT, UPDATE, DELETE, CREATE, ALTER, DROP)
 Bir veritabanı yönetim sisteminin veri kurtarma
mekanizması transaction'lara bağlıdır.
 Bir VTYS başarısızlık sonrasında verileri geri alacağı
zaman tüm transaction'ların veritabanına aktarılıp
aktarılmadığını tespit etmek için transaction loglarını
kontrol eder.
Transaction hazırlanırken dikkat
edilcek hususlar :
 VTYS yedekleme ve geri yükleme işlemlerini
transaction logları üzerinden gerçekleştirir.
 Çeşitli nedenlerden dolayı veritabanını ve ona ait
transaction logları ayrı bir disk üzerinden
tutulmalıdır.
Transaction Başlatma ve Bitirme
 Transaction ya hep ya hiç mantığıyla çalıştığı için
başlangıç ve bitiş noktaları belirlenmelidir.
 Transaction BEGIN TRANSACTION ifadesiyle başlar
ve COMMIT veya ROLLBACK ifadesiyle son bulur.
Örnek:
Kütüphane veritabanı içinde bulunan kitaplar tablosu
için örnek bir transaction işlemi gerçekleştireceğiz.
Update ifadesi kitapların tamamının sayfa sayısını
sıfır(0) yapacaktır. Daha sonra SELECT ile tablonun
son durumunu listeleyecektir.
 Sonraki slaytta her adımdan sonra tablodaki
değişimler gösterilmiştir.
Tablonun ilk hali
Örnek:
ISBN
Kitap_adi
Yayin_tarihi
S_sayisi
123
Algoritma
1.1.2010
300
312
Programlama
2.1.2010
200
begin transaction
update kitaplar set s_sayisi=0
ISBN
Kitap_adi
Yayin_tarihi
S_sayisi
123
Algoritma
1.1.2010
0
312
Programlama
2.1.2010
0
update kitaplar set kitap_adi='deneme'
select * from kitaplar
rollback
ISBN
Kitap_adi
Yayin_tarihi
S_sayisi
123
deneme
1.1.2010
300
312
deneme
2.1.2010
200
ISBN
Kitap_adi
Yayin_tarihi
S_sayisi
123
Algoritma
1.1.2010
300
312
Programlama
2.1.2010
200
Save Transaction
 Uzun transaction işlemleri için transaction kendi
içerisinde savepoint adı verilen küçük parçalara ayrılır.
Her bir bölüm commit ile veritabanına aktarılabilir
veya rollback ile işlem geri alınabilir.
 Kullanım şu şekildedir.
Save transaction savepoint_ismi
(sql cümleleri)
Commit (yada) rollback transaction savepoint_ismi
Örnek :
Kitaplar tablosu için aşağıda örnek bir transaction
işlemi verilmiştir. Verilen kodlar içerisinde
ROLLBACK ve ROLLBACK savepoint işlemlerine
örnek teşkil etmektedir.
Tablonun ilk hali
Örnek :
ISBN
Kitap_adi
Yayin_tarihi
S_sayisi
123
Algoritma
1.1.2010
300
312
Programlama
2.1.2010
200
begin transaction
save transaction deneme
ISBN
Kitap_adi
Yayin_tarihi S_sayisi
123
Algoritma
1.1.2010
0
update kitaplar set s_sayisi=0
312
Programlama
2.1.2010
0
select * from kitaplar
ISBN
Kitap_adi
Yayin_tarihi S_sayisi
rollback transaction deneme
123
Algoritma
1.1.2010
300
312
Programlama
2.1.2010
200
select * from kitaplar
update kitaplar set kitap_adi='deneme'
ISBN
Kitap_adi
Yayin_tarihi S_sayisi
select * from kitaplar
123
deneme
1.1.2010
300
rollback
312
deneme
2.1.2010
200
select * from kitaplar
ISBN
Kitap_adi
Yayin_tarihi
S_sayisi
123
Algoritma
1.1.2010
300
312
Programlama
2.1.2010
200
Örnek :
 Kodlar incelendiğinde transaction işlemi başladığında
değişiklik yapılmamış durumu deneme noktası olarak
oluşturulmuştur. Daha sonra kitapların sayfa sayısı
sıfır yapılmıştır. Sonra rolback savepoint deneme
komut satırı ile yapılan değişiklikler iptal edilmiş olup
sayfa sayısı bilgisi ilk haline gelmiştir. Sonra kitap
isimleri deneme olarak değiştirilmiştir. Sonra rollback
satırı bu işlemde geri alınmıştır.
 Önceki slaytta her adımdan sonra tablodaki değişimler
gösterilmiştir.
Download