به دلیل اینکه اطلاعات ساختار فیزیکی پایگاه داده و اطلاعات پشتیبان های گرفته شده توسط RMAN درون کنترل فایل نگهداری می شوند، کنترل فایل یک فایل حیاتی برای انجام و ادامه عملکرد پایگاه داده است و در صورتی که از دست برود، باعث از کارافتادن پایگاه داده می شود. در مطلب “کنترل فایل در اوراکل – مقدمه” توضیح دادیم که چگونه چندین کپی (multiplexing) از کنترل فایل را در دیسک های مختلف ایجاد کنیم. اگر چندین کپی از کنترل فایل وجود داشته باشد و مسیر آنها درون پارامتر control_files یا درون فایل init.ora تنظیم شده باشد، instance پایگاه داده تنها از یکی از این فایل ها برای پیدا کردن دیتا فایل ها و بدست آوردن اطلاعات پایگاه داده استفاده می کند.

ایجاد پشتیبان از کنترل فایل

در کنار امکان ایجاد چند کپی (multiplexing) از کنترل فایل، اورکل دستور alter database backup control file to را فراهم کرده است تا بتوانیم یک پشتیبان از کنترل فایل ایجاد کنیم.  دستور بالا را می توانیم به دو صورت اجرا کنیم :

۱ – برای ایجاد یک فایل باینری از کنترل فایل در یک محل مشخص

نتیجه اجرای دستور بالا ایجاد یک کپی عینی از کنترل فایل است که آنرا در محل دیگری نگهداری می کنیم. توجه کنید این پشتیبان جز رویکرد multiplexing کردن نیست بلکه هر زمان که کنترل فایل (ها) از دست بروند، می توانیم از این پشتیبان برای بازیابی کنترل فایل استفاده کنیم.

۲ – برای ایجاد فایل حاوی اسکریپت لازم برای ایجاد مجدد پایگاه داده

نتیجه اجرای دستور فوق یک trace file است که درون آن اسکریپت ایجاد مجدد پایگاه داده (re-create database script) ایجاد می شود. trace file که توسط دستور بالا ایجاد می شود درون دایرکتوری ایجاد می شود که تمامی trace file ها را نگه می دارد. در مطلب trace file ها توضیح دادیم که می توانیم از طریق کوئری زیر محل نگهداری trace file ها را بدست آورید.

راه حل بهتر برای اینکه بدانیم نام فایلی که توسط دستور alter database backup controlfile to trace ایجاد شده است چیست و کجا ذخیره شده است، خواندن فایل alert log است. بنابراین اگر دستور زیر را بلافاصله اجرا کنیم می توانیم نام و محل آنرا پیدا کنیم.

همانطور که در شکل بالا می بینید نام فایل orcl_ora_7706.trc است. شکل زیر بخشی از محتوای فایل را نشان می دهد که در آن دستور create controlfile وجود دارد. همانطور که می بینید در اسکرپیت کدهای لازم برای ایجاد مجدد کنترل فایل وجود دارد.

در ادامه مطالب همین دوره توضیح داده ایم که چگونه یک کنترل فایل را ایجاد کنیم.

بازیابی کنترل فایل از روی Trace File

در صورتی که هیچ کنترل فایلی نباشد که instance پایگاه داده آنرا بخواند، نمی توانیم پایگاه داده را startup کنیم. در شکل زیر به دلیل عدم وجود کنترل فایل خطای ORA-00205: error in identifying control file, check alert log for more info نشان داده شده است. این خطا نشان می دهد که instance نتوانسته هیچ کنترل فایلی را شناسایی کند.

برای رفع مشکل ORA-00205 می توانید از trace file استفاده کنید که توسط دستور alter database backup controlfile to trace ایجاد کرده بودید. ابتدا یک کپی از فایل با پسوند sql ایجاد کنید و سپس فایل کپی شده را با یک ویرایشگر متنی باز و تمامی محتوای آنرا به غیر از خطوط زیر پاک کنید.

سپس sqlplus را در دایرکتوری ایجاد کنید که فایل کپی در آن وجود دارد. در نهایت باید گام های زیر را دنبال کنید تا بتوانید کنترل فایل را از روی اسکریپت مجدد ایجاد کنید.

۱ – پایگاه داده در حال حاظر راه اندازی نشده است پس دستور startup nomount را اجرا کنید تا پایگاه داده در حالت nomount قرار گیرد. در این حالت نیازی به خواندن کنترل فایل نیست پس به مشکلی بر نخواهید خورد.

۲ – دستور script_name.sql@ را اجرا کنید. در sqlplus اگر بخواهید یک فایل sql را اجرا کنید با به ابتدای نام آن @ اضافه کنید. همچنین به جای script_name.sql باید نام فایل خودتان را قرار دهید. به طور مثال نام فایل من اسکریپت من create_control_file.sql است.

۳ – دستور recover database را اجرا کنید.

۴ – دستور alter database open را اجرا کنید.

در دستورهای بالا اولا باید با مجوز sysdba وارد شده باشید. سپس با دستور startup nomount پایگاه داده را در حالت nomount قرار می دهیم. دلیل اینکه پایگاه داده را باید در حالت nomount قرار دهیم این است که در حالت nomount پایگاه داده نیازی به کنترل فایل ندارد ولی در مرحله mount پایگاه داده نیاز به کنترل فایل دارد تا محل قرار گیری دیتا فایل ها و online redo log ها را پیدا کند.

پس از قرار دادن پایگاه داده در حالت nomount باید اسکرپیت را طبق خطوط ۳ و ۴ اجرا کنید. فراموش نکنید که علامت slash خط ۴ را حتما بنویسید و سپس enter بزنید تا اسکریپت اجرا شود. مطابق شکل زیر می بینید که اسکریپت با موفقیت اجرا شده است و کنترل فایل نیز ایجاد می شود. پس از این اگر دستور alter database open را اجرا کنید با خطای ORA-01113 مواجه خواهید شد.

مطابق شکل زیر برای رفع مشکل فوق باید دستور recover database را اجرا کنید. در مورد این دستور در دوره بازیابی پایگاه داده از طریق RMAN توضیح داده شده است. در نهایت باید دستور alter database open را اجرا کنید تا پایگاه داده از حالت nomount در حالت open قرار گیرد.

همچنین پیشنهاد می شود که بلافاصله پس از گام های بالا مجدد توسط دستور زیر یک پشتیبان دیگر از کنترل فایل ایجاد کنید.