در مطلب فایل های اوراکل – Parameter File توضیح دادیم که در اوراکل دو نوع پارامتر فایل وجود دارد که pfile و spfile نام دارند. pfile یک فایل متنی ساده است که به صورت init<ORACLE_SID>.ora نام گذاری می شود. instance از این پارامتر فایل ها استفاده می‌کند تا محل قرار گیری کنترل فایل را پیدا کند تا در نهایت از طریق خواندن کنترل فایل، بتواند محل ذخیره سازی دیتا فایل‌ها را پیدا و سپس آن‌ها را mount کند. در کنار pfile نوع دیگری از پارامتر فایل وجود دارد که آنرا spfile می ناند. نامگذاری spfile نیز به صورت spfile<ORACLE_SID>.ora است.

 تفاوت و اهمیت پارامتر فایل ها

تفاوت این دو نوع پارامتر فایل در این است که spfile یک فایل باینری (دودویی) است که تنها توسط دستورهای اوراکل خوانده و ویرایش می شود ولی pfile فایل متنی سادهای است که توسط اوراکل خوانده می شود ولی توسط اوراکل ویرایش نخواهد شد. به عبارت دیگر pfile را می توانیم توسط ویرایشگرهای متنی ساده مانند vim و nano در سولاریس و لینوکس و یا notepad در ویندوز آنرا بخوانیم و ویرایش کنیم.

instance باید یکی از پارامترفایل ها را بخواند تا بتواند پایگاه داده را راه اندازی کند. بنابراین بدون وجود پارامتر فایل (یا pfile و یا spfile) نمی توانیم پایگاه داده را راه اندازی و اجرا کنیم. بنابراین همانطور که در دوره بازبابی دادهها با RMAN خواهیم گفت، به یاد داشته باشید که حتماً باید از پارامتر فایل یک کپی تهیه کنیم.

در دوره RMAN خواهیم گفت که چگونه از spfile پشتیبان تهیه کنیم ولی در در حال حاضر و در حد این دوره و همین مطلب باید بدانید که می‌توانیم RMAN را به گونه‌ای تنظیم کنیم که هر بار که از دیتا فایل‌ها پشتیبان تهیه می‌شود به صورت خودکار از spfile پشتیبان تهیه شود. همچنین می‌توانیم به صورت دستی به RMAN بگوییم که از spfile پشتیبان تهیه کند.

در مورد pfile و به عبارت بهتر فایل init.ora، چون یک فایل متنی ساده است، نیازی به استفاده از RMAN برای پشتیبان گیری نیست بلکه می‌توانیم به صورت دستی و از طریق سیستم عامل از آن کپی (پشتیبان) تهیه و در محل دیگری نگهداری کنیم.

به هر حال برای راه اندازی سیستم حتماً باید یکی از دو فایل init<ORACLE_SID>.ora و یا spfile<ORACLE_SID>.ora وجود داشته باشد. نکته مهمی که در ادامه مطالعه خواهید کرد این است که می‌توانیم از روی pfile فایل spfile را ایجاد کنیم و بلعکس می‌توانیم از روی spfile فایل pfile را تهیه کنیم.

پارامتر چیست

در ساده‌ترین تعریف، هر پارامتر در اوراکل، جفت کلید و مقدار (key=value) است. به طور مثال db_name نام پارامتری است که نام پایگاه داده را در خود نگه می دارد.  Spfilنام پارامتر دیگری است که مسیر نگهداری spfile را تعیین می کند. هر دو این پارامترها یک مقدار را دریافت می کنند.

به طور مثال پارامتر db_name مقدار رشته ای را مانند orcl11g دریافت می‌کند که معرف نام پایگاه داده‌ای است که به آن متصل شده ایم. همچنین پارامتر spfile مقدار رشته ای را دریافت می‌کند که مسیر ذخیره سازی spfile را نشان می دهد. اگر فایل pfile (یا همان init.ora) را باز کنید خواهید دید که هر خط از آن به صورت یک جفت کلید و مقدار است. شکل زیر (۱) محتوای فایل init.ora را نشان می دهد.

انواع پارامترها در اوراکل

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

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

پارامترهای ایستا و پویا

بدون توجه به تک یا چند مقداری بودن پارامتر، به طور کلی دو نوع پارامترهای، پارامترهای ایستا (static parameters) و پارامترهای پویا (dynamic parameter) وجود دارند. هر یک از پارامترهای اوراکل را می توان در سه حوزه یا scope زیر تغییر دارد.

۱ – حوزه memory که تغییر بلافاصله به درون حافظه اعمال می شود.

۲ – حوزه spfile که پس از راه اندازی مجدد اوراکل، تغییرات به صورت دائمی درون spfile اعمال می شود.

۳ – حوزه both که هر دو حوزه memory و scope را شامل می شود. در این حالت بلافاصله تغییر به درون حافظه اعمال می شود و پس از راه اندازی مجدد، به صورت دائمی به spfile اعمال خواهد شد.

با توجه سه حوزه بالا می توانیم پارامترها را به دو دسته ایستا و پویا تقسیم کنیم. پارامترهای ایستا، پارامترهایی هستند که تغییرات انجام شده روی آنها در زمان راه اندازی بعدی اعمال می شوند. به عبارت حوزه این پارامترها spfile است. در مقابل پارامترهای پویا، پارامترهایی هستند که حوزه آنها memory و both است.

پیدا کردن ایستا یا پویا بودن یک پارامتر

برای اینکه بدانیم یک پارامتر از نوع ایستا یا پویا است می توانیم از یک نما (view) به نام v$parameter استفاده کنیم. برای اجرای کوئری select بر روی این نما و دیگر نماهای دیکشنری که با $v شروع می شوند باید با کاربر sys یا system به صورت زیر وارد شوید.

پس از آن برای پیدا کردن نوع یک پارامتر در کوئری زیر باید به جای PARAMETER_NAME باید نام پارامتر با جروف کوچک بنویسید.

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

اگر خروجی برابر با false بود به این معنی است که پارامتر از نوع ایستا و حوزه آن محدود به spfile است، در غیر این صورت نوع ایستا است و حوزه آن می تواند memory یا both باشد.

چگونه مقادیر هر پارامتر را پیدا کنیم

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

همانطور که گفتیم اوراکل دور روش را فراهم کرده است، روش اول که توضیح می‌دهیم استفاده از دستور show parameter و روش دوم استفاده از نما v$parameter است. در خروجی هر دو روش مقدار انتساب داده شده به پارامتر را نشان می‌دهد و یا اینکه نشان داده می‌شود که هنوز مقداری برای آن تنظیم نشده است.

فرض کنید می‌خواهیم نام پایگاه داده را پیدا کنیم، برای این کار باید از طریق sqlplus به پایگاه داده وصل شوید و سپس یکی از دستورهای زیر را اجرا کنید.

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