a

ABLY مقالات و مطالب مجموعه

آموزش Transaction

آموزش Transaction

بسم الله الرحمن الرحیم

آموزش Transaction

 مورد فایل LDF قبلا توضیحاتی ارائه گردید همان طور که قبلا ذکر کردیم نام این فایل Transaction DataBase File می باشد و وظیفه آن ذخیره دستورات برای اجرای کامل آنها در صورت ایجاد مشکل می باشد.

برای استفاده هوشمندانه از این ویژگی می بایست به صورت زیر عمل کنیم:

BEGIN TRAN T1
SELECT * FROM Account
COMMIT TRAN T1

 

BEGIN TRAN T1

این دستور باعث می شود خطوط بعدی در رم ذخیره شود.

COMMIT TRAN T1

باعث می شود کل دستورات در فایل ذخیره می شود.

بسم الله الرحمن الرحیم

آموزش Transaction

 مورد فایل LDF قبلا توضیحاتی ارائه گردید همان طور که قبلا ذکر کردیم نام این فایل Transaction DataBase File می باشد و وظیفه آن ذخیره دستورات برای اجرای کامل آنها در صورت ایجاد مشکل می باشد.

برای استفاده هوشمندانه از این ویژگی می بایست به صورت زیر عمل کنیم:

BEGIN TRAN T1
SELECT * FROM Account
COMMIT TRAN T1

 

BEGIN TRAN T1

این دستور باعث می شود خطوط بعدی در رم ذخیره شود.

COMMIT TRAN T1

باعث می شود کل دستورات در فایل ذخیره می شود.

برای مدیریت خطاهایی که رخ می دهد می بایست از ساختار Try-Catch استفاده کنیم. در این صورت اگر خطایی رخ دهد دیگر دستورات ادامه پیدا نمی کند و به صورت مدیریت شده دستورات متوقف می شود. برای درک بهتر این مسئله را در نظر بگیرید، فکر کنید می خواهید اطلاعات کاربری را پیدا کنید که دارای نام کاربری مشخص است اگر این کاربر در سیستم وجود نداشته باشد خطایی رخ نمی دهد و دستورات به صورت کامل اجرا می شوند حال اگر دستور بعد از بازیابی اطلاعات کاربر دستور مربوط به واریز مبالغی به حساب وی باشد این فرایند بدون هیچ مشکلی خاصی اجرا می شود ولی مبالغ انتقال داده نمی شود این باعث می شود که شما در نظر بگیرید که کار را به خوبی انجام داده اید برای حل این مشلات بهتر است فرایند ها را با RollBack مدیریت کنید.  حال اگر خطای منطقی رخ دهد بهتر است برای مدیریت آن از دستور Try-Catch استفاده نماییم.

ROLLBACK کل دستورات درون تراکنش را لغو می کند.

مثال:

 

BEGIN TRY
    BEGIN TRAN T1

        IF(((SELECT COUNT(*) FROM Account) != 2))
        RAISERROR('خطا',16,1)

    COMMIT TRAN T1


END TRY
BEGIN CATCH

    PRINT @@ERROR --شماره خطا
    PRINT ERROR_NUMBER()--شماره خطا
    PRINT ERROR_MESSAGE() -- پیغام خطا
    ROLLBACK TRAN T1

END CATCH

 

 ممکن است گاهی بخواهید تراکنش های تو در تو ایجاد کنید، حال حالتی را در این تراکنش در نظر بگیرید که تراکنش داخلی تر نخواهید به هر دلیل اجرا شود، برای مدیریت این روش باید یک Save Point تعریف نماییم تا زمانی که پدر Commit می شود فرزند Rollback می شود، در واقع فرزند از بین می رود.

نکته: با استفاده از Save Point ها فقط می توانیم یک تیکه را Rollback کنیم.

نکته: دستوراتی مانند Select یا انتساب متغییر ها حتی اگر RollBack هم شوند اجرا می شود چون این دستورات از Ram می خوانند و RollBack فقط باعث می شود که دستورات در دیسک ذخیره نشوند.

مثال:

BEGIN TRY
    BEGIN TRAN Parent

        SELECT COUNT(*) FROM Account
                BEGIN TRY
                
                    SAVE TRAN SAVEPOINT
                    SELECT COUNT(*) FROM Account

                END TRY
                BEGIN CATCH
                
                ROLLBACK TRAN SAVEPOINT
                
                END CATCH
                
        SELECT COUNT(*) FROM Account
        COMMIT TRAN Parent


END TRY
BEGIN CATCH

ROLLBACK TRAN Parent

END CATCH

نظرات یا سوالات خودرا با ما درمیان بگذارید