Transaction Mimarisi-2

Xact_State()  Fonksiyonu

 

Try-catch yapısını kullandığımızda bir hata aldığımızda transaction rollback edilir. Transaction’ın o anki durumu hakkında bilgi alıp durumuna göre işlem yapabiliriz. Transaction’ın durumu hakkında bilgi almak için xact_state() fonksiyonu kullanılır.

1–> Transaction’ın aktif olduğunu gösterir.

0–> Transaction’ın pasif olduğunu gösterir.

2–> İlgili transaction’ın sonlandırılabilir bir transaction olmadığını gösterir.


begin tran
insert into Production.Culture values ('tr','Turkish',GETDATE())
if xact_state()=1
begin
print 'aktif bir transaction vardır.'
end
rollback tran

Nested Transactions

Sql server bir transaction bitmeden başka bir transaction başlatmanıza izin verir. Nested transaction için kullanılan “commit” ifadesi en içteki transaction için kullanılır ve @@trancount değerini 1 azaltır. Commit işleminden farklı olarak rollback işlemi ise tüm transactionları sonlandırır  ve @@trancount değerine 0 atanır.

Transaction Yönetimi

Açık unutulmuş bir transaction içinde sistemdeki bir objeyi kilitleyecek bir işlem yapılıyorsa transaction sonlanıncaya kadar o objeye erişilmez. Bu obje çok önemli bir tablo ise bu durum kabul edilemez. Sistem üzerindeki açık olan transactionlar kontrol edilip duruma göre başka bir obje kitleniyorsa, o transaction sonlandırılır.

Dbcc Opentran Komutu

Dbcc opentran komutu ile veri tabanındaki açılmış olan ve hala sonlandırılmamış transacationları bulabiliriz.


begin tran

insert into Production.Culture values ('tr','Turkish',GETDATE())
dbcc opentran
if xact_state()=1
begin
print 'aktif bir transaction vardır.'
end

rollback tran

çıkacak olan result aşağıdadır.

dbccopentran

Dbcc Inputbuffer Komutu

Daha önceden açılmış bir transactionın içeriğine bakıp hangi komutların o anda çalıştığını görmek için dbcc inputbuffer komutunu çalıştırabiliriz. Yukarıdaki result sonucunda görünen spid değerini parametre olarak alan dbcc inputbuffer komutuna verdiğimizde transactionın o anki içeriğini görebiliriz.


begin tran

insert into Production.Culture values ('ger','Germany',GETDATE())
dbcc inputbuffer(52)
if xact_state()=1
begin
print 'aktif bir transaction vardır.'
end

rollback

inputbuffer

Keyifli çalışmalar.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir