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

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

Redo Log در اوراکل چیست و چه نقشی در بازیابی و پایداری داده‌ها دارد؟

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

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

اینجاست که Redo Log به میدان می‌آید؛ یک مکانیزم حیاتی که قلب تپنده بازیابی اوراکل محسوب می‌شود.

در این مقاله آموزش Oracle در بخش آموزش معماری اوراکل مفصل در مورد Redo Log صحبت می کنیم.

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

در این نوشته شما می خوانید

Redo Log چیست؟

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

برخلاف Datafileها که داده‌ها را ذخیره می‌کنند، Redo Log فقط ثبت می‌کند که چه تغییراتی انجام شده و چگونه باید دوباره اجرا شوند.

🔹 مثال ساده:

اگر رکوردی با مقدار “علی” تغییر کند به “رضا”، Redo Log می‌گوید:

«در سطر شماره ۱۵، ستون name مقدار از “علی” به “رضا” تغییر یافت.»

و نه اینکه کل جدول را ذخیره کند.

اجزای Redo Log در اوراکل

سیستم Redo Log از دو بخش اصلی تشکیل می‌شود:

Redo Log Buffer

  • بخشی از حافظه SGA
  • محل ثبت سریع تغییرات قبل از نوشتن روی دیسک
  • بسیار سریع ولی ناپایدار (در RAM)

Online Redo Log Files

  • فایل‌های فیزیکی روی دیسک
  • محل ذخیره دائمی تغییرات از Redo Log Buffer

چطور Redo Log کار می‌کند؟ (جریان کامل عملیات)

  1. کاربر یک تراکنش مثل INSERT اجرا می‌کند.
  2. تغییرات وارد Redo Log Buffer می‌شوند.
  3. فرآیند LGWR (Log Writer) تغییرات را از بافر به Online Redo Log File می‌نویسد.
  4. وقتی یک فایل پر شد، Log Switch انجام شده و گروه بعدی فعال می‌شود.

📌 مشاهده جریان Redo:

				
					SELECT name, value 
FROM v$sysstat
WHERE name LIKE 'redo%';

				
			

گروه‌ها و Multiplexing در Redo Log

Redo Log معمولاً در قالب چند گروه (Groups) تعریف می‌شود.

هر گروه می‌تواند چند فایل موازی در مسیرهای مختلف دیسک داشته باشد تا در صورت خرابی یک فایل، نسخه دوم در دسترس باشد.

این ویژگی را Multiplexing می‌نامند.

🔹 مشاهده گروه‌ها:

				
					SELECT GROUP#, STATUS, MEMBER 
FROM V$LOGFILE 
ORDER BY GROUP#, MEMBER;

				
			

نقش حیاتی Redo Log در بازیابی داده‌ها

وقتی دیتابیس کرش می‌کند:

  • ممکن است داده‌ها هنوز روی Datafile نوشته نشده باشند، اما در Redo Log موجود باشند.
  • با Instance Recovery یا Media Recovery، این تغییرات دوباره اعمال (Redo) می‌شوند.
  • نتیجه: دیتابیس به آخرین حالت Commit شده بازمی‌گردد.

📌 سناریوی واقعی:

یک عملیات UPDATE روی ۱ میلیون رکورد در حال اجراست که برق قطع می‌شود.

Redo Log تضمین می‌کند دیتابیس بعد از استارت دوباره، تمام تغییرات Commit شده را برمی‌گرداند.

تست عملی تولید Redo Log

اگر بخواهید Redo Log ها را در عمل ببینید:

				
					CREATE TABLE test_redo (
    id NUMBER PRIMARY KEY,
    data VARCHAR2(100)
);

BEGIN
    FOR i IN 1..10000 LOOP
        INSERT INTO test_redo VALUES (i, 'Sample Data ' || i);
    END LOOP;
    COMMIT;
END;
/

				
			

بعد از اجرا:

				
					SELECT name, value
FROM v$sysstat
WHERE name LIKE 'redo%';

				
			

نکات بهینه‌سازی Redo Log

  • اندازه مناسب انتخاب کنید
    • خیلی کوچک: Log Switch زیاد و کاهش کارایی
    • پیشنهاد: متناسب با حجم تراکنش، ۵۱۲MB تا چند GB
  • Multiplexing را فعال کنید تا خرابی فایل مشکل‌ساز نشود.
  • محل ذخیره سریع (مثل SSD) برای I/O بالا استفاده کنید.
  • برای عملیات حجیم (Bulk) می‌توانید NOLOGGING استفاده کنید (با آگاهی از ریسک Recovery).

تفاوت Redo Log و Archive Log

ویژگی Redo Log Archive Log
وضعیت فعال و در حال نوشتن نسخه آرشیو شده Redo‌های قدیمی
کاربرد بازیابی بعد از Crash بازیابی Point-in-time و پشتیبان‌گیری

سوالات متداول درباره Redo Log در اوراکل

اگر Multiplexing فعال نباشد، ممکن است بازیابی کامل ناممکن شود.

وظیفه نوشتن سریع داده‌ها از Redo Log Buffer به فایل فیزیکی Redo Log.

به صورت مستقیم خیر؛ این کار فقط با تغییر ساختار لاگ و پس از خاموشی دیتابیس ممکن است.

جمع‌بندی

Redo Log ستون فقرات پایداری و بازیابی در اوراکل است. هر تراکنشی که ذخیره می‌کنید، با کمک Redo Log مطمئن می‌شوید حتی در بدترین شرایط، داده‌های شما امن باقی می‌مانند.

📥 اگر سوالی داری در مورد Redo Log در Oracle داری، در بخش کامنت‌ها بپرس.

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

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

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

میثم راد

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

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

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