ESC را فشار دهید تا بسته شود

زمیوس آموزش، یادگیری و سرگرمی

پایان تراکنش‌های ناموفق در Oracle Database با قابلیت Automatic Transaction Retry (ATR)

در سیستم‌های دیتابیس پرتراکنش، تراکنش‌های ناموفق یا Failed Transactions یکی از عوامل اصلی کاهش عملکرد و نارضایتی کاربران هستند.

این خطاها معمولاً به دلایل مختلفی رخ می‌دهند:

  • خطاهای Serialization (ORA-08177) در سطح ایزولیشن Serializable
  • Deadlock (ORA-00060) به دلیل قفل‌های متقاطع
  • مشکلات موقتی شبکه (Transient Network Errors)

پیش از عرضه نسخه‌های جدید اوراکل، رفع این مشکل معمولاً به برنامه‌نویسی دستی مکانیزم Retry در لایه اپلیکیشن نیاز داشت؛ فرایندی پیچیده و زمان‌بر.

اوراکل با معرفی ویژگی Automatic Transaction Retry (ATR) این فرآیند را خودکار کرده است.

در این مقاله آموزش اوراکل در بخش آموزش امکانات جدید Oracle 23ai کامل در ATR صحبت میکنم. 

قبل از شروع هر کاری در اوراکل اول بایستی یه نسخه از دیتابیس اوراکل اونم از نوع Oracle Database 23ai رو روی سیسمت داشته باشی. پیشنهاد می کنم برای این کار حتما لینک مقاله زیر رو ببین تا خیلی راحت اوراکل رو نصب کنی. 

در این مقاله شما می خوانید

Automatic Transaction Retry چیست؟

Automatic Transaction Retry (ATR) یک ویژگی در Oracle Database 21c و نسخه‌های بالاتر است که به‌صورت خودکار تراکنش‌هایی که به علت خطاهای موقتی شکست می‌خورند، Rollback کرده و دوباره اجرا می‌کند.

مزایای این ویژگی:

  • حذف نیاز به مکانیزم Retry در اپلیکیشن
  • کاهش بار پردازشی روی لایه برنامه‌نویسی
  • بهبود تجربه کاربری با کاهش پیغام‌های خطا

نحوه فعال‌سازی Automatic Transaction Retry

برای فعال‌سازی ATR می‌توانید از این دستورات استفاده کنید:

در سطح Session:

				
					ALTER SESSION SET RETRY_ON_ROW_CHANGE = TRUE;

				
			

در سطح System:

				
					ALTER SYSTEM SET RETRY_ON_ROW_CHANGE = TRUE SCOPE=BOTH;

				
			

نکته: این پارامتر باعث می‌شود تا در صورت بروز خطای تغییر رکورد در طول تراکنش، اوراکل به‌صورت خودکار عملیات را مجدد اجرا کند.

مثال عملی از ATR در اوراکل

جدول فرضی ORDERS را در نظر بگیرید.

Session 1:

				
					UPDATE orders SET status = 'Shipped' WHERE order_id = 100;
COMMIT;

				
			

Session 2 (با ATR فعال):

				
					UPDATE orders SET status = 'Processing' WHERE order_id = 100;
COMMIT;

				
			

در حالت عادی، این همزمانی باعث خطای ORA-08177 می‌شود، اما با ATR تراکنش Session 2 به‌طور خودکار Rollback و سپس مجدد اجرا می‌شود، بدون اینکه کاربر متوجه چیزی شود.

خطاهای قابل پشتیبانی در اوراکل

  • ORA-08177: can’t serialize access for this transaction
  • برخی خطاهای Deadlock که بازیابی پذیر هستند
  • خطاهای موقتی شبکه (در صورت پیکربندی خاص)

محدودیت‌های ATR

  • عدم پشتیبانی از عملیات Non-Deterministic PL/SQL
  • محدودیت به Read Committed و Serializable Isolation
  • تراکنش‌های بسیار طولانی باعث افزایش زمان Retry می‌شوند
  • عدم وجود Backoff Logic داخلی

Best Practices برای استفاده از ATR در اوراکل

  • استفاده در تراکنش‌های کوتاه و ساده
  • تست کامل پیش از فعال‌سازی در محیط Production
  • ترکیب با Transaction Guard و Application Continuity
  • مانیتور کردن تراکنش‌ها از طریق Viewهای سیستمی (V$SESSION، V$TRANSACTION)

مقایسه Manual Retry و ATR

ویژگی Manual Retry Automatic Transaction Retry
توسعه پیچیده و زمان‌بر بی‌دردسر و خودکار
کنترل روی رفتار Retry کامل محدود به مکانیزم داخلی اوراکل
خطاهای پشتیبانی شده هر نوع خطا (با کدنویسی) فقط خطاهای Transient
تجربه کاربری وابسته به تیم توسعه کاملاً شفاف و بدون خطا

سوالات متداول درباره Automatic Transaction Retry در اوراکل

Automatic Transaction Retry یا ATR قابلیتی در Oracle Database است که هنگام وقوع خطاهای موقتی (مثل ORA‑۰۸۱۷۷ یا برخی Deadlockها)، تراکنش را به‌صورت خودکار Rollback کرده و مجدد اجرا می‌کند.

این کار باعث کاهش تراکنش‌های ناموفق و حذف نیاز به Retry دستی در اپلیکیشن می‌شود.

ATR بیشتر برای خطاهای Transient طراحی شده است مانند:

  • ORA-08177 (خطای Serialization)
  • Deadlockهایی که قابل بازیابی باشند
  • برخی خطاهای موقتی شبکه، بسته به تنظیمات سیستم

خیر. بهتر است ATR در تراکنش‌های کوتاه و Deterministic استفاده شود.

در تراکنش‌های طولانی یا دارای عملیات غیرقابل تکرار، به دلیل احتمال تغییر نتایج، استفاده از ATR ممکن است ریسک ایجاد کند.

می‌توانید ATR را در سطح Session یا System فعال کنید:

ALTER SESSION SET RETRY_ON_ROW_CHANGE = TRUE;
ALTER SYSTEM SET RETRY_ON_ROW_CHANGE = TRUE SCOPE=BOTH;

این تنظیم باعث می‌شود تراکنش‌هایی که به علت تغییر ردیف همزمان شکست می‌خورند، به‌صورت خودکار دوباره اجرا شوند.

جمع‌بندی

قابلیت Automatic Transaction Retry یکی از ویژگی‌های کلیدی Oracle Database برای حذف یا کاهش تراکنش‌های ناموفق است.

این مکانیزم باعث می‌شود تا بدون نیاز به تغییرات گسترده در کد اپلیکیشن، کارایی و پایداری سیستم افزایش یابد.

با این حال، شناخت محدودیت‌ها و ارزیابی دقیق قبل از پیاده‌سازی در محیط عملیاتی بسیار ضروری است.

📥 اگر سوالی داری در مورد Automatic Transaction Retry در اوراکل داری، در بخش کامنت‌ها بپرس.

سؤالی درباره این مقاله داری؟

اگر نکته‌ای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفت‌وگوی واقعی 💬

برو به صفحه پرسش و پاسخ

میثم راد

من یه برنامه نویسم که حسابی با دیتابیس اوراکل رفیقم! از اونایی ام که تا چیزی رو کامل نفهمم،ول کن نیستم، یادگرفتن برام مثل بازیه، و نوشتن اینجا کمک می کنه تا چیزایی که یاد گرفتم رو با بقیه به شریک بشم، با هم پیشرفت کنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *