Transaction Nedir?

Transaction Nedir?

Bir veya daha fazla SQL ifadesini tek bir işlem haline getirilmesine transaction denir. En azından en basit hali ile bu şekilde anlatabiliriz. Transactionlar; ardı ardına gelen ve birbirleriyle bağımlı birden fazla işlemin tek bir işlem olarak kullanılmasını sağlar. Transactionlarda SQL ifadelerinin bir bölümünün uygulanması gibi bir durum söz konusu değildir.

Transactionlar genelde tek bir işlem yapmak üzerine kullanılır. Örneğin bir tabloya veri ekleme, silme veya update etme gibi. Tabii geliştiricinin isteğine göre birden fazla işlemde gerçekleştirilebilir.

Normal SQL’de de bunlar zaten yapılabiliyor tabii ki. Burada transaction gereksiz gibi bir algı oluşmamalı. Transactionlar, yapılmak istenilen işlemlerinin birinin gerçekleşmemesi halinde buna bağlı diğer işlemlerde gerçekleştirilmemesini sağlar ve böylece veri tutarlılığı sağlanır. Bir örnek ile açıklayacak olursak; A kişisi B kişisine banka üzerinden 100 TL’lik bakiyesinden 25 TL’sini 70 TL bakiyesi olan B kişiye gönderecek. Havale işleminin mantığı olarak, havale gerçekleştiği sırada A kişisinin bakiyesi 100 TL’den 75 TL’ye düşecek ve 70 TL bakiyesi olan B kişinin bakiyesi de 95 TL’ye yükselecek. Teknoloji de bir kul yapısıdır, her an her yerinde bir hata oluşabilir. Bu havale işleminde eğer bir hata meydana geldiğini düşünelim ve paranın A kişiden B kişisine aktarılırken hata oluşsun. A kişinin bakiyesi 75 TL’ye düşerken B kişinin bakiyesi 70 TL’de kalacaktır ve 25 TL ne A kişisinde ne de B kişisinde olacaktır. Bu da doğal olarak veri tutarsızlığını doğuracaktır. İşte bu durumda transactionlar devreye girer. Bu havale işlemini gerçekleştirdiğimiz bankanın veri tabanında transaction kullanılırsa, bir hata sırasında işlem durdurulup, iptal edilecek ve veri tutarsızlığının önüne geçilecektir. Yani hata olması durumunda A kişisinde 100 TL, B kişisinde de 70 TL olmaya devam edecektir.

En başta da söylediğim gibi, transactionlarda işlemler tek bir işlem gibi görülür. Havale işleminde bakiye ilk önce gönderenin hesabından düşürülür, ardından gönderilen kişinin hesabına eklenir. Eğer bu adımlardan birisinde bir hata meydana gelir ve gerçekleşmez ise işlem iptal edilir ve ilk haline döndürülür. Buna RollBack denilir. Eğer bu işlemlerde herhangi bir sorun olmaz ise, işlemler kalıcı hale getirilir. Buna da Commit denir.

Oluşturduğumuz transaction oldukça büyükse transaction içerisine SAVEPOINT‘ler ekleyerek transactionu bölümlere ayırabilir, her bölümü COMMIT ile veritabanına yazabilir veya ROLLBACK ile işlemi geri alabiliriz.

Transaction yapıları, transaction loglarında tutulur. Bu yöntem ile bir transaction başladıktan sonra SQL ifadeleri için kullanılan verileri tutan sayfalar diskten hafızaya aktarılır ve SQL tarafında ki değişiklikler hafızada yapılır. Transaction işlemi başarılı ise hafızada ki veri alınır ve diske yazılır yani veriler güncellenir ve commit ifadesi ile değişiklikler aktif hale getirilir.

Transaction Log: Transaction log dosyasında, veritabanında ki transaction ile oluşan tüm değişiklikler sırası ile, adım adım kayıt edilir.

Transaction hazırlarken dikkat edilmesi gerekenler

Öncelikle transaction işlemleri veritabanı üzerinde değişiklik yapacağı için veritabanı userların gerekli izinlere sahip olması gerekmektedir. Transactionlar da veriye ve veritabanına etki edecek SQL ifadeleri barındırır. (INSERT, UPDATE, CREATE, DELETE, ALTER, DROP) Bunun yanı sıra database administratorlerin veri kurtarma mekanizmaları transactionlara bağlıdır.

Bir diğer konu ise başarısız bir transaction sürecinden sonra, verilerin geri alınacağı zaman tüm transactionların veritabanına aktarılıp aktarılmadığını tespiti için loglar kontrol edilir. Eğer aktarılmamış bir veri bulunursa onları log üzerinden geri veritabanına aktarmak mümkündür. Bu yüzden transactionları tekrar tekrar çalıştırmak bu tür durumların önüne geçmemizi sağlar.

Az önce de söylediğimiz gibi, veritabanı sisteminde yedekleme ve geri getirme işlemleri transaction logları ile gerçekleştirilir. Yedekleme mantığında, sistem düzenli olarak veritabanını ve transaction loglarını yedek diske alarak, ana sistemin kurulu olduğu diskte sorun olduğunda ve verilerde hasar oluştuğunda bu alınan yedekler sayesinde geri döndürme mümkündür.

Transaction’un Mantığı;

 

rollback
Transaction’un Mantığı

 

SAVEPOINT’li TRANSACTION Mantığı;

transaction_savepoint
Transaction’larda SavePoint’in Çalışma Algoritması

Yanda ki örnekte daha önceden başlayan bir transaction SAVEPOINT A noktasına kadar başarılı geliyor ve orada kayıt ediliyor. Ardından devam ederek bir sonra ki işleme geçiyor. Burada eğer bir hata oluşrsa ROLLBACK‘e düşecek ve geri SAVEPOINT A noktasına dönüş yapacak. Eğer bu kısımdan da başarılı bir bir şekilde devam ederse bir sonra ki adıma geçecek ve tahmin edebileceğiniz gibi burada hata olursa SAVEPOINT B noktasına ROLLBACK olacak. Eğer bu adımda da hata olmazsa COMMIT adımına gelecek ve işlem tamamlanacaktır.

Bir Cevap Yazın