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.