instance در مرحله nomount پارامتر فایل را می خواند تا محل کنترل فایل را پیدا کند. سپس در مرحله mount کنترل فایل را می خواند تا محل دیتا فایل ها را پیدا کند. هر پایگاه یک کنترل فایل دارد که فایل باینری است که ساختار فیزیکی پایگاه داده را مشخص می کند که شامل موارد می شود.

۱نام پایگاه داده را مشخص می کند. (پارامتر db_name) 

۲نام و محل ذخیره سازی دیتافایل ها و onlie redo logs ها را مشخص می کند.

۳زمان ایجاد پایگاه داده را مشخص می کند.

۴عدد فعلی log sequence number را نشان می دهد. (در ادمه دوره توضیح داده شده است)

۵اطلاعات مربوط به چک پوینت (check point) را مشخص می کند.

بدون وجود کنترل فایل، پایگاه داده اوراکل قابل mount شدن نیست و در این صورت ریکاوری کردن پایگاه داده سخت خواهد بود. برای اطمینان بیشتر در زمان ایجاد کنترل فایل یک کپی دیگر از آن در محلی متفاوت ایجاد می شود. بنابراین لازم است زمان ایجاد کردن پایگاه داده اوراکل چندین کپی از کنترل فایل نیز در محل های متفاوت ایجاد شود. همچنین می توان پس از ایجاد پایگاه داده، کپی های دیگری از کنترل فایل ایجاد کرد.

چگونه محل کنترل فایل ها را پیدا کنیم

پارامتر control_files نام و محل کنترل فایل را نشان می دهد. اوراکل در زمان کار خود بر روی کنترل فایل ها می نویسد. مثلا اضافه شدن یک دیتافایل جدید به درون پایگاه داده که یک تغییر فیزیکی است.

راه دیگر برای پیدا کردن کنترل فایل ها استفاده از نما دیشکنری v$controlfile به صورت زیر است.

اهمیت و ایجاد چند کپی از کنترل فایل

اوراکل برای انجام فعالیت های خود به کنترل فایل نیاز دارد و در صورتی که کنترل فایل از دست برود، فعالیت پایگاه داده نیز متوقف خواهد شد. کنترل فایل محلی است که اطلاعات پایگاه داده در آن ذخیره می شود. به طور مثال محل فایل های پتشیبان و یا آخرین checkpoint را در خود نگه می دارد. بنابراین لازم است تا همواره چندین کپی از آنرا در محل های (دیسک های) مختلف داشته باشیم.

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

۱ – اضافه کردن، پاک کردن و تغییر نام دیتا فایل ها.

۲ – اضافه کردن یا پاک کردن یک tablespace

۳ – تغییر حالت یک پایگاه داده به وضعیت read/write

۴ – اضافه کردن یا پاک کردن فایل یا گروه online redo log.

گام های ایجاد کپی از کنترل فایل

برای این کار اول باید توسط پارامتر control_files یا v$controlfile محل کنترل فایل تعیین شود سپس پایگاه داده خاموش شود و در نهایت توسط دستورهای سیستم عامل از یکی از آنها کپی و در محل جدید قرار گیرد. در نهایت باید نام و محل جدید به پارامتر control_files اضافه شود.

برای ایجاد کپی از کنترل فایل دو حالت وجود دارد، آیا instance پایگاه داده از pfile استفاده می کند که در این صورت باید با یک ویرایشگر متنی ساده پارامتر control_files را ویرایش کرد ولی اگر پایگاه داده از spfile استفاده می کند پس باید از دستور alter system set استفاده کرد.

پایگاه داده در تمامی این فایل ها می نویسد ولی در زمان عملیات خود فقط اولین فایل درون پارامتر control_files را می خواند. اگر هیچ یک از کنترل فایل ها در طور عملیات پایگاه داده در دسترس نباشد آنگاه پایگاه داده از کار می افتد.

برای ایجاد کپی جدید از کنترل فایل زمانی که پایگاه داده را با init.ora راه اندازی می کنید، باید گام های زیر را دنبال کنید:

۱ – خاموش کردن اوراکل با دستور shutdown یا همان shutdown normal

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

۳ – ورایش فایل init.ora به دلیل اینکه باید محل کنترل فایل های جدید در این فایل نیز نوشته شود.

۴ – با دستور startup پایگاه داده را راه اندازی مجدد کنید.

برای ایجاد کپی جدید از کنترل فایل زمانی که پایگاه داده را با spfileORACLE_SID.ora راه اندازی می کنید، باید گام های زیر را دنبال کنید:

۱ – خاموش کردن اوراکل با دستور shutdown یا همان shutdown normal

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

۳ – راه اندازی مجدد instance پایگاه داده

۴ – اجرای دستور alter system set

۵ – خاموش کردن پایگاه داده

۴ – با دستور startup پایگاه داده را راه اندازی مجدد کنید.

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

بنابراین اگر فرض کنیم که می خواهیم پارامتر spfileORACLE_SID.ora را برای راه اندازی استفاده کنیم باید مطابق گام های زیر عمل کنیم. توجه کنید که در دستور alter database set باید مقادیر با ویرگول از هم جدا شوند و همچنین مقدار جدید که مسیر منتهی به کنترل فایل جدید است پس از مقدار قبلی قرار می گیرد.

بنابراین در دستورهای بالا instance پایگاه داده در ابتدا سعی در خواندن فایل path/to/old/controlfile1.ctl/ دارد و اگر پیدا نشد به سراغ مقدار بعدی خواهد رفت. همچنین پیش از این گفتیم که چگونه محل کنترل فایل ها را پیدا کنید.

گام های پاک کردن یا تغییر نام یک کنترل فایل

۱ – خاموش کردن پایگاه داده با استفاده از دستور shutdown

۲ – حذف مقدار منتسب به کنترل فایل و یا تغییر نام کنترل فایل از درون پارامتر control_files

۳ – اگر می خواهید کنترل فایل را حذف کنید، پس از حذف مقدار از درون پارمتر contro_files می توانید به صورت دستی آنرا پاک کنید.

۳ – اگر می خواهید کنترل فایل را تغییر نام هید، پس از تغییر نام مقدار از درون پارمتر contro_files می توانید به صورت دستی آنرا تغییر نام دهید.

۴ – راه اندازی مجدد instance پایگاه داده

بنابراین اگر فرض کنیم که می خواهیم از درون spfile کنترل فایلی را حذف کنیم باید دستورهای زیر را انجام دهیم.

مثال

فرض می کنیم که فعلا تنها دو کنترل فایل و آنهم در مسیرهای u01/app/oracle/oradata/orcl/control01.ctl/ و u01/app/oracle/flash_recovery_area/orcl/control02.ctl/ قرار دارند. می خواهیم یک کنترل فایل جدید به نام control03.ctl را در زیر دایرکتوری u02/app/orcl/ ایجاد کنیم.

در کدهای بالا، ابتدا instance را خاموش کرده ایم. سپس از درون محیط sqlplus و توسط دستور host کنترل فایل را در محل جدید کپی کرده ایم. سپس توسط پایگاه داده را توسط دستور startup راه اندازی کرده و در نهایت توسط دستور alter system set مقدار جدید را به پارامتر control_files اضافه کرده ایم. توجه کنید که هر مقدار که مسیر منتهی به یک کنترل فایل است را با ویرگول از هم جدا کرده ایم.

همچنین پس از تغییر پارامتر control_files باید ابتدا پایگاه داده را shutdown و مجدد startup کنید تا تغییر بر روی پارامتر control_files اعمال شود. دلیل آن این است که حوزه پارامتر control_files از نوع spfile است و به این معنی است که تغییرات در راه اندازی بعدی اعمال می شوند.

حال فرض کنید می خواهیم کنترل فایل جدیدی را که اضافه کرده ایم را پاک کنیم. برای این کار مسیر منتهی به دو کنترل فایل قبلی را نگه می داریم و تنها مسیر منتهی به کنترل فایل جدید را از پارامتر control_files پاک می کنیم. همچنین پیش از هر چیز باید از دستور show parameter control_files استفاده کنید تا مقدار فعلی پارامتر control_files را مشاهده کنید.