2 Mart 2014 Pazar

Sql Server Implicit Transaction Yapısı

Bazı zamanlar delete , drop, update gibi  önemli sorguları çalıştırırken ufak bir dikkatsizlik bize çok büyük zarar verebilir. 
Bunun önüne geçmek aslında bizim elimizde olan bir şeydir.
Çoğu sql server müdavimlerinin şikayeti ORACLE ne güzel bu işlemi hemen geri alabilirdim ama sql serverda bunu yapamıyorum diye yakınıyor. 
Bu gibi yakınmalara mahal vermemek için sevgili developerlara ve sql server geliştiricilerine tam olarak hitap eden TRANSACTION tipi IMPLICIT TRANSACTION dır.
Bu transaction sql server da default olarak OFF durumdadır. Yukarıda ki gibi önemli sorgularımızı çalıştırırken manuel olarak bu transaction'ı ON duruma getirip çalıştırabilirsiniz. 
Bu şekilde yapmış olduğunuz işlemde bir hata var ise tıpkı oracle da olduğu gibi rollback yapabilecek ve yapmış olduğunuz işlemi geri alabileceksiniz. 
Burada dikkat etmemiz gereken diğer sorgulara ve sisteme zarar vermeden bu işi halletmemiz dir. Bunun için bulk işlemlerden özellikle kaçınmalısınız ve olması gerektiği gibi bu işlemleri küme küme yapmalısınız.

Bu transaction tipi Oracle'ın default transaction yapısıdır, sql server auto commiti default olarak kullanmaktadır, yani aslına baktığımızda bu olay sql server'ın bir handikapı değil bir tercihidir. Bizim sistemlerimizde de hangisi tercih edersek edelim aslında aynı özelliği kullanabileceğimiz hatırlatmak istedim.

Peki Nasıl olacak IMPLICIT TRANSACTION 'ı nasıl aktif hal getirebiliriz.

Set implicit_transactions ON     -- bu şekilde sessionımızda transaction tipimizi değişitirmiş oluyoruz artık otomatik olarak sql server sorgumuzu commit etmeyecek bizden komut bekleyecek demektir. 

Yapmış olduğumu sorgunun eğer doğru olduğunu düşünüyorsak sql server bizden bu query'i commit etmemizi bekleyecektir.

Commit komutu ile sorgumuzu işlemiz oluruz. 

Eğer çalıştırdığımız query de bir hata tespit eder ve geri almak istersek 

Rollback dememiz yeterli olacaktır. 

Tüm sorgularınızı çalıştırıp artık oturumunuzu kapatacak ken mutlaka transaction modu OFF yapmayı unutmayın !

Set implicit_transactions OFF

NOT: bu transaction olayı biraz maaliyetlidir, sakın açık unutmayın siz yinede sorgunuzun altına unutmamak için commit ve rollback komutunu yazın hatırlatmaksı açısından işinize yaracaktır. 
BİLDİĞİNİZ GİBİ AÇIK KALAN TRANSACTIONLAR DİĞER SORGULARI VE SİSTEMİ LOCKLAYACAKTIR.!


Hiç yorum yok: