تراکنش (TRANSACTIONS)در پایگاه  داده SQL

تیم تحریریه 1404/01/28 0 16
لینک کوتاه https://zoheirsoftware.com/z/dff45c35e |
تراکنش (TRANSACTIONS)در پایگاه  داده sql,سطوح ایزوله (Isolation Levels),بهترین روش‌های استفاده از تراکنش‌ها

تراکنش (TRANSACTIONS) در پایگاه داده SQL

تراکنش‌ها در پایگاه داده یکی از اساسی‌ترین مفاهیم در سیستم‌های مدیریت پایگاه داده رابطه‌ای (RDBMS) هستند که تضمین می‌کنند عملیات پایگاه داده به صورت امن و قابل اعتماد انجام می‌شوند.

تراکنش در پایگاه داده به مجموعه‌ای از عملیات گفته می‌شود که به عنوان یک واحد منطقی و یکپارچه اجرا می‌شوند.

تراکنش‌ها از چهار ویژگی اصلی به نام ACID برخوردارند:

  • اتمیک بودن (Atomicity)

    تراکنش یا به طور کامل انجام می‌شود یا اصلاً انجام نمی‌شود.
  • سازگاری (Consistency)

    تراکنش پایگاه داده را از یک حالت سازگار به حالت سازگار دیگر منتقل می‌کند.
  • انزوا (Isolation)

    تراکنش‌های همزمان نباید بر یکدیگر تأثیر بگذارند.
  • دوام (Durability)

    پس از تکمیل تراکنش، تغییرات حتی در صورت خرابی سیستم باقی می‌مانند.

تراکنش (TRANSACTIONS) در پایگاه داده SQL

 

 

مزایای تراکنش‌ها در پایگاه داده SQL

  • اطمینان از یکپارچگی داده‌ها

    تراکنش‌ها تضمین می‌کنند که داده‌ها در حالت سازگار باقی می‌مانند، حتی در صورت بروز خطا در حین اجرای عملیات.
  •  امکان بازگشت تغییرات (Rollback)

    اگر در میانه اجرای تراکنش مشکلی پیش بیاید، می‌توان تمام تغییرات را به حالت اولیه بازگرداند.
  • کنترل همزمانی

    تراکنش‌ها به چندین کاربر اجازه می‌دهند به طور همزمان با پایگاه داده کار کنند بدون اینکه یکدیگر را مختل کنند.
  • بازیابی از خرابی‌ها

    در صورت بروز خرابی سیستم، تراکنش‌های تکمیل شده حفظ می‌شوند و تراکنش‌های ناتمام بازگردانده می‌شوند.
  • انعطاف‌پذیری در توسعه برنامه‌ها

    برنامه‌نویسان می‌توانند عملیات پیچیده را به صورت واحدهای مجزا طراحی کنند.

 

مزایای تراکنش‌ها در پایگاه داده SQL

 

مدیریت تراکنش در Transact-SQL

دستورات اصلی مدیریت تراکنش

  • BEGIN TRANSACTION (یا BEGIN TRAN)

    شروع یک تراکنش جدید
  • COMMIT TRANSACTION (یا COMMIT TRAN)

    تأیید و تکمیل تراکنش
  • ROLLBACK TRANSACTION (یا ROLLBACK TRAN)

    بازگشت تمام تغییرات تراکنش
  • SAVE TRANSACTION (یا SAVE TRAN)

    ایجاد نقطه ذخیره در تراکنش

مثال‌های عملی از تراکنش

مثال 1: تراکنش ساده

BEGIN TRANSACTION;
    INSERT INTO Customers (CustomerName, ContactName, Country)
    VALUES ('Cardinal', 'Tom B. Erichsen', 'Norway');
    
    UPDATE Products
    SET Price = Price * 1.1
    WHERE ProductID = 1;
COMMIT TRANSACTION;


مثال 2: تراکنش با کنترل خطا

BEGIN TRY
    BEGIN TRANSACTION;
        -- عملیات اول
        UPDATE Accounts SET Balance = Balance - 1000 WHERE AccountID = 1;
        
        -- عملیات دوم
        UPDATE Accounts SET Balance = Balance + 1000 WHERE AccountID = 2;
        
        -- اگر به اینجا رسید، همه عملیات موفق بودند
        COMMIT TRANSACTION;
END TRY
BEGIN CATCH
    -- اگر خطایی رخ داد، تغییرات را بازگردان
    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION;
        
    -- اطلاعات خطا را نمایش بده
    SELECT 
        ERROR_NUMBER() AS ErrorNumber,
        ERROR_SEVERITY() AS ErrorSeverity,
        ERROR_STATE() AS ErrorState,
        ERROR_PROCEDURE() AS ErrorProcedure,
        ERROR_LINE() AS ErrorLine,
        ERROR_MESSAGE() AS ErrorMessage;
END CATCH


مثال 3: استفاده از نقاط ذخیره (Savepoints)

BEGIN TRANSACTION;
    -- عملیات اول
    INSERT INTO Orders (OrderDate, CustomerID) VALUES (GETDATE(), 1);
    
    -- ایجاد نقطه ذخیره
    SAVE TRANSACTION SavePoint1;
    
    -- عملیات دوم
    UPDATE Inventory SET Quantity = Quantity - 10 WHERE ProductID = 5;
    
    -- اگر موجودی کافی نبود، به نقطه ذخیره برگرد
    IF @@ROWCOUNT = 0
    BEGIN
        ROLLBACK TRANSACTION SavePoint1;
        PRINT 'موجودی کافی نبود، فقط سفارش ثبت شد';
    END
    
    COMMIT TRANSACTION;


سطوح ایزوله (Isolation Levels)

در SQL Server سطوح مختلفی از ایزوله‌سازی وجود دارد:

  • READ UNCOMMITTED

    کمترین سطح ایزوله، امکان خواندن داده‌های تایید نشده
  • READ COMMITTED

    پیش‌فرض SQL Server، فقط داده‌های تایید شده خوانده می‌شوند
  • REPEATABLE READ

    تضمین می‌کند داده‌های خوانده شده در تراکنش قابل تکرار هستند
  • SNAPSHOT

    هر تراکنش نسخه‌ای ثابت از داده‌ها را می‌بیند
  • SERIALIZABLE

    بالاترین سطح ایزوله، تراکنش‌ها به صورت سریال اجرا می‌شوند

 

 

 

🌟 آیا می‌خواهید به یک متخصص پایگاه داده تبدیل شوید و در دنیای فناوری اطلاعات بدرخشید؟

با دوره آموزشی SQL Server ما، شما می‌توانید به راحتی و با روشی عملی، تمام مهارت‌های لازم را یاد بگیرید!

این دوره به شما آموزش می‌دهد که چگونه داده‌ها را به بهترین شکل مدیریت کنید، گزارش‌های قدرتمند بسازید و به تحلیل‌های عمیق دست یابید.

با محتوای جذاب و پروژه‌های واقعی، شما نه تنها تئوری را یاد می‌گیرید، بلکه توانایی‌های عملی خود را نیز تقویت می‌کنید.

پس فرصت را از دست ندهید! همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آینده شغلی روشن‌تر بردارید!

 همین حالا شروع کنید و به دنیای داده‌ها بپیوندید!

 

مثال تنظیم سطح ایزوله

 

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
    -- عملیات تراکنش
COMMIT TRANSACTION;


تراکنش‌های توزیع شده

تراکنش‌های توزیع شده عملیاتی هستند که چندین پایگاه داده یا سرور را شامل می‌شوند:

BEGIN DISTRIBUTED TRANSACTION;
    -- عملیات روی سرور محلی
    UPDATE LocalDB.dbo.Accounts SET Balance = Balance - 100 WHERE AccountID = 1;
    
    -- عملیات روی سرور دیگر
    EXEC RemoteServer.RemoteDB.dbo.Deposit 100, 2;
    
    -- اگر همه عملیات موفق بودند
    COMMIT TRANSACTION;


بهترین روش‌های استفاده از تراکنش‌ها

  • کوتاه نگه داشتن تراکنش‌ها

    تراکنش‌های طولانی می‌توانند باعث قفل شدن منابع شوند.
  • مدیریت صحیح خطاها

    همیشه خطاها را مدیریت کنید تا تراکنش‌های باز باقی نمانند.
  • انتخاب سطح ایزوله مناسب

    سطح ایزوله بیش از حد می‌تواند بر عملکرد تأثیر بگذارد.
  • اجتناب از تراکنش‌های تو در تو

    در صورت امکان از تراکنش‌های تو در تو اجتناب کنید.
  • استفاده از نقاط ذخیره برای عملیات پیچیده

    این کار امکان بازگشت جزئی را فراهم می‌کند.

 

بهترین روش‌های استفاده از تراکنش‌ها

 

مشکلات رایج و راه‌حل‌ها

  • تراکنش‌های باز مانده

-- مشاهده تراکنش‌های باز
DBCC OPENTRAN;

-- پایان دادن به تراکنش‌های باز خاص
KILL [SPID];

 

  • بن‌بست (Deadlock)

-- تنظیم زمان‌بندی برای تشخیص بن‌بست
SET DEADLOCK_PRIORITY LOW; -- یا NORMAL یا HIGH

-- یا استفاده از دستور زیر برای تنظیم سطح ایزوله
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
  • قفل‌های طولانی مدت

    -- مشاهده قفل‌های فعلی
    SELECT * FROM sys.dm_tran_locks;
    
    -- یا استفاده از
    sp_who2;
    

     

دوره های مرتبط
آموزش Sql,آموزش sqlserver, آموزش جامع Sqlserver

آموزش پایگاه داده SqlServer

پایگاه داده Sqlserver یکی از پایگاه داده های مهم برای ذخیره اطلاعات محسوب میشود .

997,000 تومان

2.7k بازدید

ارسال دیدگاه

برای ارسال نظر لطفا ورود یا ثبت نام کنید.