دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
کنترل FontDialog در سی شارپ
1404/01/29 -
تراکنش (TRANSACTIONS)در پایگاه داده SQL
1404/01/28 -
کنترل ErrorProvider در سی شارپ
1404/01/27 -
کنترل DataGridView در سی شارپ
1404/01/26 -
کنترل ComboBox در سی شارپ
1404/01/24
تراکنش (TRANSACTIONS)در پایگاه داده SQL

تراکنش (TRANSACTIONS) در پایگاه داده SQL
تراکنشها در پایگاه داده یکی از اساسیترین مفاهیم در سیستمهای مدیریت پایگاه داده رابطهای (RDBMS) هستند که تضمین میکنند عملیات پایگاه داده به صورت امن و قابل اعتماد انجام میشوند.
تراکنش در پایگاه داده به مجموعهای از عملیات گفته میشود که به عنوان یک واحد منطقی و یکپارچه اجرا میشوند.
تراکنشها از چهار ویژگی اصلی به نام ACID برخوردارند:
-
اتمیک بودن (Atomicity)
تراکنش یا به طور کامل انجام میشود یا اصلاً انجام نمیشود. -
سازگاری (Consistency)
تراکنش پایگاه داده را از یک حالت سازگار به حالت سازگار دیگر منتقل میکند. -
انزوا (Isolation)
تراکنشهای همزمان نباید بر یکدیگر تأثیر بگذارند. -
دوام (Durability)
پس از تکمیل تراکنش، تغییرات حتی در صورت خرابی سیستم باقی میمانند.
مزایای تراکنشها در پایگاه داده SQL
-
اطمینان از یکپارچگی دادهها
تراکنشها تضمین میکنند که دادهها در حالت سازگار باقی میمانند، حتی در صورت بروز خطا در حین اجرای عملیات. -
امکان بازگشت تغییرات (Rollback)
اگر در میانه اجرای تراکنش مشکلی پیش بیاید، میتوان تمام تغییرات را به حالت اولیه بازگرداند. -
کنترل همزمانی
تراکنشها به چندین کاربر اجازه میدهند به طور همزمان با پایگاه داده کار کنند بدون اینکه یکدیگر را مختل کنند. -
بازیابی از خرابیها
در صورت بروز خرابی سیستم، تراکنشهای تکمیل شده حفظ میشوند و تراکنشهای ناتمام بازگردانده میشوند. -
انعطافپذیری در توسعه برنامهها
برنامهنویسان میتوانند عملیات پیچیده را به صورت واحدهای مجزا طراحی کنند.
مدیریت تراکنش در 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;
دوره های مرتبط

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