فایل‌های online redo log در اوراکل بسیار پر اهمیت هستند. اگر مطالب را به یاد داشته باشید، گفتیم هر تغییری در داده ها، ابتدا در یک بافر به نام buffer cache نوشته می شود. اما پس از نوشته شدن این تغییرات چه اتفاقی می افتد؟

پس از نوشتن تغییرات در buffer cache، ابتدا اثرات این تغییرات در غالب رکوردهای redo درون فضای online redo buffer نوشته می‌شوند و سپس توسط یک مکانیزم معین و از طریق فرایند پس زمینه‌ای به نام LGWR، به درون فایل‌هایی به نام online redo log نوشته می شوند. همانطور که از نام فایل مشخص است، online redo log فایل‌ها لاگ (log) هستند.

مطابق با اصول لاگ نویسی، فایل‌های online redo log شامل رکوردهایی هستند که هر کدام از آنها، یک تغییر را بر روی داده‌های پایگاه داده نشان می دهد. هر رکورد تعیین می‌کند که چه تغییری بر روی کدام داده یا جدول و در چه زمانی رخ داده است. در اصطلاح به این رکوردها، رکوردهای redo (یا redo recorde) گفته می شود.

به عبارت دیگر، تغییرات ابتدا درون فضای buffer cache و در همین حین اثر آن‌ها درون online redo buffer نوشته می شود. سپس اول از همه فرایند LGWR محتوای online redo log را بر روی online redo log ها اعمال می‌نویسد و در نهایت و برای ثبت نهایی این تغییرات، فرایند DBWn تغییرات را از buffer cache به دیتا فایل‌ها اعمال می کند.

به عبارت بهتر فایل‌های online redo log شامل رکوردهایی هستند که هر یک اثر یک تراکنش نهایی شده را در خودش نگه می دارد. یک تراکنش مجموعه‌ای از دستور العمل ها است که بر روی اقلام داده‌ای درون پایگاه داده اجرا می شوند. هر تراکنش در طول دوره حیات خود، یک نقطه شروع و یک نقطه پایان دارد.

تراکنش نهایی و تراکنش ناموفق

هر تراکنش یا به صورت موفقیت آمیز و یا به صورت ناموفق و با شکست، به پایان می رسد. در صورتی که تراکنش با موفقیت به پایان برسد، آنرا تراکنش نهایی شده (committed transaction) و اگر تراکنش با شکست مواجه شود، آنرا تراکنش ناموفق (aborted transaction) می گویند. بنابراین فایل‌های online redo log شامل اثرات تفییرات تمامی تراکنش های نهایی شده است.

البته هم online redo log ها و هم دیتا فایل‌ها بر روی دیسک قرار دارند ولی تفاوت در این است که دیتا فایل‌ها شامل data block هایی هستند که داده‌ها را به صورت دائمی در خود نگه می‌دارند ولی online redo log ها شامل رکوردهایی هستند که هر رکورد یک تغییر را بیان می کند.

یک نکته را همیشه به یاد داشته باشید و آن اینکه مستقل از اوراکل و در تمامی پایگاه داده ها، در ابتدا هر تغییری در حاظفه اصلی نوشته می‌شود و سپس و پیش از ثبت نهایی بر روی دیسک، این تغییرات باید لاگ شوند. پس از انجام لاگ و بر اساس مکانیزم معینی، تغییرات برای ثبت نهایی بر روی دیسک ها (دیتا فایل‌های اوراکل) نوشته می شوند. همچنین مستقل از اوراکل و بر اساس مفاهیم پایگاه داده، دو نوع لاگ وجود دارند که عبارتند از:

۱ – redo log

۲ – undo log

redo به معنی بازگشت تغییراتی است که در دیتا فایل ها ثبت نهایی شده اند. فرض کنید پس از آنکه داده ها بر روی دیتافایل نوشته شدند بر اثر بروز مشکل دیتا فایل از بین برود. در این حالت چگونه باید داده های از دست رفته را بر گردانیم؟ راهکار استفاده از رکوردهای redo است که در دو محل زیر قرار دارند. دلیل آن هم اینکه redo log ها شامل اثرات تراکنش هایی هستند که اثر تغییرات آنها بر روی دیتافایل ها ثبت نهایی شده است.

۱ – online redo log ها

۲ – archive redo log ها – (توضیح در مطلب بعدی)

اما در مقابل رکوردهای undo هستند. undo به معنی از بین بردن اثرات تراکنش هایی است که اثر آنها درون دیتا فایل ها درج نهایی نشده است. به طور مثال در حین نوشتن تغییرات به دلیل مشکل power سیستم خاموش شود، پس اثرات تراکنش ها غیرنهایی روی دیتا فایل ها نوشته می شود. در زمان بازیابی (ریکاوری – recovery) باید از رکوردهای undo استفاده شود، تا اثرات مخرب بر روی دیتا فایل ها اعمال نشوند.

مدیریت undo یا undo management در دوره ریکاوری با RMAN توضیح داده شده است.

کدام زمان LGWR روی Online Redo Log می نویسد

شکل زیر نمامی کلی online redo buffer و فایل online redo log و فرایند LGWR را نشان می دهد. فرایند LGWR مسئول نوشتن محتوای online redo buffer به درون فایل های online redo log است. LGWR به هر حال برای فراهم بودن همیشگی فضا در online redo buffer، همواره و هر سه ثانیه یک بار محتوای بافر را به درون online redo log کپی می کند.

به طور کلی LGWR با توجه به موقعیت های زیر محتوای online redo buffer را به درون فایل های online redo log می نویسد:

۱ – هر زمان که دستور commit صادر شود. دستور commit به معنی پایان یافتن موفقیت آمیز و نهایی شدن یک تراکنش است، پس باید اثرات تراکنش باید در دیتا فایل ها ثبت نهایی شود. اما پیش از آن فرایند LGWR محتوای online redo buffer را به درون online redo log می نویسد و سپس فرایند DBWn بلاک های dirty در buffer cache را به درون دیتا فایل ها می نویسد.

۲ – هر زمان که یک سوم (1/3) از کل فضای بافر پر شود. online redo log فضای مهمی از SGA است زیرا اثرات تراکنش های نهایی شده درون آن قرار دارند و از همین جهت همیشه باید فضای کافی داشته باشد.

۳ – هر زمان که فرایند DBWn بخواهد بلاک های dirty را بر روی دیتا فایل بنویسد. در این حالت پیش از هر چیز LGWR محتوای online redo buffer را بر روی online redo log می نویسد و سپس DBWn محتوای buffer cache را بر روی دیتا فایل می نویسد.

Online Redo Log های اوراکل – پیش گفتار

Online Redo Log های اوراکل – ایجاد گروه ها و فایل ها

Online Redo Log های اوراکل – مفهوم مالتی پلکس کردن

Online Redo Log های اوراکل – مفهوم Log Switch