مطابق با مطلب پیشین گفتیم که در SGA فضایی به نام redo buffer وجود دارد که اول از همه رکوردهای redo (یا redo log) درون این فضای شکل می گیرند و سپس توسط فرایندی به نام LGWR درون فایل های online redo log که روی دیسک هستند نوشته می شوند. هر زمان که یک تراکنش نهایی می شود (توسط دستور COMMIT) تمامی رکوردهای online redo log مربوط به آن تراکنش از فضای redo buffer بر روی فایل های ریدولاگ نوشته می شوند. زمانی که فرایند LGWR اثرات یک تراکنش را از درون redo buffer به درون فایل های online redo log روی دیسک می نویسد یک عدد منحصر به فرد به نام SCN یا System Change Number به آن اختصاص می دهد تا بتواند از طریق این عدد اثرات یک تراکنش را پیدا کند.

پس از اجرای دستور COMMIT توسط کاربر، زمانی که تمامی رکوردهای ریدو مربوط به تراکنش به صورت کامل و موفقیت آمیز بر روی فایل های ریدولاگ روی دیسک نوشته شدند، آنگاه به کاربر پیام موفقیت آمیز بودن نهایی شدن تراکنش نشان داده می شود. در حالت دیگر و زمانی که فضای redo buffer پر شده باشد، فرایند LGWR برای آزاد سازی فضای redo buffer، کل رکوردهای redo (یا edo log) را از درون بافر به درون فایل online redo log می نویسد، حتی اگر هیچ تراکنشی نهایی نشده باشد.

فرایند LGWR چگونه کار می کند

فرایند LGWR در یک فرم و حالت چرخشی بر روی online redo log ها می نویسد. زمانی که یکی از ریدولاگ ها پر شود، فرایند LGWR بر روی فایل دیگر شروع به نوشتن می کند. زمانی که آخرین ریدولاگ نیز پر شد، فرایند LGWR شروع به نوشتن مجدد بر روی اولین فایل می کند. این یک فرم چرخشی است.

در شکل زیر (۱) به فایل شماره ۱ اول SCN=1 اختصاص داده شده است زیرا یک محتوا از رکوردهای ریدو (یا redo log) از بافر (redo buffer) به درون اولین online redo log نوشته شده اند و عدد SCN=1 به آن اختصاص داده شده است. سپس فرایند سراغ دومین فایل رفته و مجدد رکوردهای ریدو (یا redo log) را از بافر به درون آن می نویسد و یک SCN=2 به آن اختصاص داده می شود.

پس از پر شدن به سراغ فایل شماره ۳ می رود و اطلاعات بافر را درون آن می نویسد و عدد SCN=3 را اختصاص می دهد. مجدد فرایند به سراغ فایل شماره ۱ می رود و روی آن بازنویسی می کند و عدد SCN=4 را به آن اختصاص می دهد و الی آخر.

اوراکل چگونه از محتوای فایل های Online Redo Log محافظت می کند

همانطورکه گفتیم رکوردهای درون فایل های online redo log برای انجام موفقیت آمیز فرایند بازیابی (ریکاوری) پایگاه داده مهم هستند، پس اوراکل چگونه از محتوای این فایل ها که همان رکوردهای redo هستند محافظت می کند؟ اوراکل برای رفع از میان رفتن محتوای فایل های online redo log مکانیزم یا راهکاری به نام Archive log را ارائه کرده است که اشاره به آرشیو کردن محتوای یک online redo log دارد.

در واقع هدف از مفهوم archive log پشتیبان گیری از محتوای یک فایل online redo log است. به عبارت دیگر اگر پایگاه داده اوراکل به حالت archive mode تنظیم شده باشد، هر زمان که فرایند lgwr بخواهد روی یکی از فایل های online redo log باز نویسی مجدد کند اجازه نخواهد داشت تا زمانی که کل محتوای آن ابتدا به صورت یک فایل آرشیو شده بر روی دیسک نوشته شود.

اگر پایگاه داده در حالت NOARCHIVELOG باشد، یک فایل ریدولاگ پر شده زمانی در دسترس فرایند LGWR قرار می گیرد که تمامی رکوردهای آن (اثرات تراکنش ها) به صورت دائمی بر روی دیتافایل ها ذخیره شوند. اگر پایگاه داده در حالت ARCHIVELOG یک فایل ریدولاگ پر شده زمانی در دسترس فرایند LGWR قرار می گیرد که تمامی رکوردهای آن (اثرات تراکنش ها) به صورت دائمی بر روی دیتافایل ها ذخیره و سپس فایل مورد نظر آرشیو شود.

بنابراین آنچه تا به حال گفتیم را می توانیم به صورت زیر خلاصه کنیم:

۱ – online redo log فایل هایی بر روی دیسک هستند که محتوای آنها توسط فرایند lgwr پر می شود. در واقع هر زمان که دستور COMMIT صادر شود، کل رکوردهای redo مربوط به آن تراکنش از درون فضای redo buffer به درون یکی از فایل های online redo log نوشته می شود.

۲ – هر زمان که فرایند lgwr روی یک online redo log بنویسد، عدد یا شماره SCN درون پایگاه داده اوراکل تغییر می کند.

۳ – نوشتن فرایند lgwr از اولین فایل online redo log شروع می شود و سپس تا آخرین فایل می رود و اگر فرایند در حالت archive mode نباشد، پس مجدد روی اولین فایل online redo log باز نویسی می کند.

۴ – اگر پایگاه داده در حالت archive mode باشد، پس فرایند lgwr نمی تواند روی یک فایل online redo log مجدد بازنویسی کند، بلکه باید تا زمانی صبر کند که محتوای فایل online redo log بر روی دیسک به صورت کامل و موفقیت آمیز آرشیو شود.

۵ – بنابراین پایگاه داده می تواند در دو حالت NO ARCHIVELOG و حالت ARCHIVELOG قرار داشته باشد. حالت پیشفرض در زمان نصب و راه اندازی پایگاه داده،حالت NO ARCHIVELOG است. در مطالب بعدی به طور کامل این مباحث توضیح داده شده اند.

زمانی که پایگاه داده در حالت ARCHIVELOG قرار دارد، فرایندی به نام ARCn مسئول آرشیو سازی فایل های Online Redo Log  است. توجه کنید که فایل های online redo log و archive log هر دو فایل هایی هستند که درون دیسک قرار دارد ولی در معماری پایگاه داده اوراکل، فایل online redo log شامل محتوای بافر redo buffer است که توسط فرایند LGWR نوشته می شوند ولی هر archivelog دقیقا یک کپی از یک فایل online redo log است که توسط یکی فرایند ARCn نوشته و ایجاد می شود.

انواع حالت ها (وضعیت های) یک فایل Online Redo Log

یک فایل online redo log در یکی از پنج وضعیت زیر قرار دارد.

۱ – فعلی یا current : اوراکل در هر لحظه از تنها می تواند از یک فایل online redo log یا به عبارت دیگر از یک گروه فایل های online redo log برای ثبت اثرات تراکنش ها استفاده کند. فایل online redo log که فرایند LGWR در همین لحظه در حال نوشتن بر روی آن است در وضعیت یا حالت current قرار دارد.

۲ – فعال یا active : فایل های online redo log که برای انجام بازیابی (ریکاوری) instance (یا instance recovery) استفاده می شوند در وضعیت active قرار دارند. در مطالب پیش رو در مورد instance recovery صحبت شده است.

۳ – غیر فعال یا inactive : فایلی online redo log که به صورت کامل و توسط فرایند ARCn بر روی دیسک آرشیو شده است، در حالت inactive قرار دارد. این فایل برای انجام instance recovery لازم نیست.

۴ – غیر معتبر یا invalid : همانطور که از نام آن مشخص است این وضعیت نشان می دهد که فایل online redo log نامعتبر و از دسترس خارج شده است و فرایند LGWR نمی تواند روی آن بنویسید.

۵ – غیر استفاده شده یا unused : این وضعیت اولیه ای است که پس از ایجاد فایل online redo log به آن انتساب داده می شود. در این حالت هنوز فایل online redo log خالی است.

پیدا کردن اطلاعات در مورد Online Redo Log

برای پیدا کردن اطلاعات در مورد فایل های online redo log سه دیتا دیکشنری زیر وجود دارد که با اجرای کوئری ها می توان اطلاعات را در مورد آنها پیدا کرد. هر یک از این دیتا دیکشنری ها اطلاعاتی را در مورد فایل online redo log نشان می دهد، به طور مثال می خواهیم وضعیت فایل های online redo log را پیدا کنیم.

دیتا دیکشنری V$LOG

این دیتا دیکشنری اطلاعات فایل های online redo log را از فایل control file بدست می آورد. اگر به یاد داشته باشید در مطالب قبلی توضیح دادیم instance ابتدا از طریق خواندن یکی از فایل init.ora یا spfile، می تواند محل کنترل فایل را بدست آورد، سپس از درون آن می تواند محل دیتا فایل ها (data files) و همچنین فایل های online redo log را بدست آورد.

همانطور که از شکل بالا مشخص است شماره نخ (یا #thread) در این instance عدد یک است که چهار گروه online redo log به آن اختصاص داده شده است. ستون ARCHIVED دارای مقادیر YES و NO است که YES به این معنی است که فایل online redo log آرشیو شده است. توجه کنید فایل online redo log که در وضعیت CURRENT است، فعلا آرشیو نشده است.

به طور کلی اگر پایگاه داده در حالت ARCHIVE MODE باشد، هر زمان که فرایند LGWR بخواهد روی آن مجدد با زنویسی کند، حتما باید از محتوای فعلی آن یک آرشیو ایجاد شود و زمانی که آرشیو ایجاد شد، مقدار ستون ARC از NO به YES تغییر می کند. بنابراین اگر فرایند LGWR روی فایل در حالت نوشتن است، پس وضعیت فایل فایل CURRENT است و به این معنی است که هنوز ازمحتوای فعلی آن آرشیو ایجاد نشده است، پس مقدار ستون ARCHIVED برابر با NO است.

توجه کنید اگر پایگاه در حالت NOARCHIVE باشد، پس به دو معنی است، اول اینکه از محتوای فایل online redo log پشتیان (آرشیو) ایجاد نمی شود و به عبارت دیگر محتوای فایل ها از بین می روند. دوم اینکه مقدار ستون ARCHIVED همیشه برابر به NO است.

دیتا دیکشنری V$LOG دارای یک سری دیگر از ستون ها است که بر اساس نسخه اوراکل می توانید از لینک های زیر مطالعه کنید. شکل بالا مربوط به اجرای دستور SELECT در اوراکل ۱۱ است.

دیتا دیکشنری V$LOG در اوراکل ۱۱

دیتا دیکشنری V$LOG در اوراکل ۱۲

ستون MEMBER معرف تعداد فایل های درون هر یک از گروه ها است. با توجه به شکل بالا هر کدام از چهارگروه تنها دارای یک عضو هستند به عبارت دیگر هر گروه تنها دارای یک فایل online redo log است. ستون BYTES اندازه فایل را بر حسب بایت نشان می دهد.

دیتا دیکشنری V$LOGFILE

اگر بخواهیم مسیر فایل های online redo log را پیدا کنیم باید از دیتا دیکشنری V$LOGFILE استفاده کنیم. در شکل زیر (۲) ستون MEMBER نام و مسیر هر یک از فایل های online redo log هر کدام از گروه ها را نشان می دهد. ستون STATUS وضعیت یا حالت فایل را نشان می دهد. این ستون در دیتا دیکشنری V$LOGFILE می تواند یکی از سه مقدار زیر را داشته باشد.

۱ – invalid : به این معنی است که فایل قابل دسترسی و استفاده شدن توسط فرایند LGWR نیست.

۲ – stale : این وضعیت به این معنی است که به دلیل برخی از مشکل ها مانند crash شدن instace (پایگاه داده) یا به دلیل اجرای دستور shutdown abort فایل online redo log به صورت غیر کامل (incomplete) باقی مانده است. زمانی که گروه این فایل بعدا به صورت یا حالت فعال (active) در بیاید، آنگاه این فایل نیز به صورت فعال خواهد شد.

۳ – deleted : فایل دیگر مورد استفاده قرار نمی گیرد.

۴ – NULL : مقدار NULL برای ستون STATUS به این معنی است که همین فایل فعلا در حال استفاده شدن است.

ستون دیگر IS_RECOVERY_DEST_FILE نام دارد که اگر مقدار آن YES باشد، به این معنی است که فایل در فضای flash recovery area (یا FRA) ایجاد شده است و در غیر این صورت و عدم ایجاد در فضای FRA، مقدار NO در این ستون خواهد بود.

همانند دیتا دیکشنری V$LOG که نسبت به نسخه های ۱۱ و ۱۲ تفاوت داشت، این دیتا دیکشنری نیز نسبت به نسخه های ۱۱ و ۱۲ متفاوت است. تنها تفاوت، وجود ستون  CON_ID است که در نسخه ۱۲ وجود دارد.

دیتا دیکشنری V$LOGFILE در اوراکل ۱۱

دیتا دیکشنری V$LOGFILE در اوراکل ۱۲

فضای Flash Recovery Area در اوراکل چیست