arşiv

Pazartesi, 14 Eyl 2020 için arşiv

SQL – XACT_STATE

Pazartesi, 14 Eyl 2020 yorum yok

XACT_STATE işleminde aşağıdaki değerler dönecektir:

XACT_STATE SonucuAçıklaması
0Etkin herhangi bir transaction yok.
1Hali hazırda aktif olan ve commit edilebilir bir transaction var.
-1Aktif transaction var fakat hata oluşmuş. Transaction sadece rollback edilebilir.

Aşağıdaki örnekte XACT_STATE ifadesi kullanılmıştır:

BEGIN TRY
BEGIN TRANSACTION;
INSERT INTO dbo.SimpleOrders(custid, empid, orderdate)
VALUES (68,9,'2006-07-12');
INSERT INTO dbo.SimpleOrderDetails(orderid,productid,unitprice,qty)
VALUES (1, 2,15.20,20);
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
SELECT ERROR_NUMBER() AS ErrNum, ERROR_MESSAGE() AS ErrMsg;
IF (XACT_STATE()) = -1
BEGIN
ROLLBACK TRANSACTION;
END;
ELSE .... -- provide for other outcomes of XACT_STATE()
END CATCH;

XACT_ABORT Kullanımı

Görüldüğü üzere SQL Server, transaction işleminde herhangi bir hata oluştuğunda otomatik rollback yapmaz. Bu ve önceki bölümde, commit ve rollback işlemleri için yoğunlukla TRY/CATCH kullanılmıştır. TRY/CATCH kullanılmayan durumlarda bir hata oluştuğunda otomatik rollback edebilmek için başka bir yöntem daha bulunmaktadır. XACT_ABORT ayarı ile, transaction çalışırken hata oluştuğunda rollback edilip edilmeyeceği ayarlanabilmektedir.

Varsayılan olarak, XACT_ABORT devre dışıdır. SET ile XACT_ABORT etkin hale getirilebilir:

SET XACT_ABORT ON;

SET XACT_ABORT ayarı ON durumundayken, TRY bloğu haricinde bir hata meydana gelirse tüm transaction işlemi sonlandırılarak rollback edilir. TRY bloğunda oluşan bir hatada ise, XACT_ABORT ayarına rağmen transaction açık tutulur fakat commit edilemez hale getirilmektedir.

KAYNAK: http://www.sqlekibi.com/sql-server/transactionlarin-kontrolu-2.html/

Categories: Genel Tags: