ESC را فشار دهید تا بسته شود

زمیوس آموزش، یادگیری و سرگرمی

PFILE و SPFILE در اوراکل: بررسی کامل تفاوت‌ها، مزایا و کاربردها

اگر با Oracle Database کار کرده باشی، دیر یا زود به یکی از مهم‌ترین بخش‌های مدیریت دیتابیس می‌رسی: فایل‌های پارامتر.

همان فایل‌هایی که تعیین می‌کنند دیتابیس با چه تنظیماتی بالا بیاید، چه مقدار حافظه مصرف کند، چند process همزمان داشته باشد و ده‌ها رفتار مهم دیگر.

در این میان، دو اسم خیلی زیاد به گوشت می‌خورند:

  • PFILE
  • SPFILE

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

اما واقعیت این است که تفاوت PFILE و SPFILE در Oracle، مستقیماً روی راه‌اندازی دیتابیس، مدیریت تنظیمات، پایداری تغییرات، عیب‌یابی و حتی Recovery اثر می‌گذارد.

در این مقاله آموزش Oracle در بخش آموزش معماری اوراکل ،می‌خواهیم بررسی کنیم که:

  • PFILE چیست؟
  • SPFILE چیست؟
  • تفاوت PFILE و SPFILE دقیقاً در چیست؟
  • کدام‌یک برای محیط عملیاتی  بهتر است؟
  • در زمان خرابی، Recovery و Troubleshooting کدام به درد می‌خورد؟

اگر با Oracle Database کار می‌کنید، احتمالاً بارها شنیده‌اید که تنظیم صحیح Memory چقدر در سرعت و عملکرد سیستم تأثیر دارد. مدیریت حافظه در اوراکل یکی از مهم‌ترین مباحث Performance Tuning محسوب می‌شود و اگر درست انجام نشود، سیستم دچار کندی، افزایش I/O، مصرف بالای CPU و خطاهای پرتکراری مثل ORA-04031 و ORA-04030 خواهد شد.

پیشنهاد می کنم این مقاله زیر رو حتما مطالعه کنی.

در این مقاله شما می خوانید

PFILE مخفف Parameter File است.

این فایل، یک فایل متنی ساده است که پارامترهای موردنیاز Oracle Instance داخل آن نگهداری می‌شوند.

به زبان خیلی ساده، PFILE مثل یک فایل تنظیمات سنتی است که DBA می‌تواند آن را با ادیتورهای معمولی باز کند و تغییر دهد.

نمونه‌ای از PFILE

				
					db_name='ORCL'
memory_target=2G
processes=300
open_cursors=500
control_files='/u01/app/oracle/oradata/ORCL/control01.ctl','/u02/app/oracle/oradata/ORCL/control02.ctl'
diagnostic_dest='/u01/app/oracle'

				
			

ویژگی‌های اصلی PFILE

  • متنی و قابل‌خواندن است
  • امکان ویرایش دستی دارد
  • برای Startup دیتابیس قابل استفاده است
  • برای Recovery و عیب‌یابی بسیار مفید است
  • اما مدیریت آن در محیط‌های حرفه‌ای، سخت‌تر و پرریسک‌تر از SPFILE است

SPFILE مخفف Server Parameter File است.

این فایل نسخه مدرن‌تر و حرفه‌ای‌تر فایل پارامتر در Oracle است.

برخلاف PFILE که متنی است، SPFILE یک فایل باینری است و Oracle آن را مستقیماً مدیریت می‌کند.

یعنی شما معمولاً SPFILE را با editor باز نمی‌کنی، بلکه از طریق دستورات Oracle آن را تغییر می‌دهی.

مثال تغییر پارامتر در SPFILE
				
					ALTER SYSTEM SET processes=500 SCOPE=SPFILE;

				
			

یا:

				
					ALTER SYSTEM SET open_cursors=1000 SCOPE=BOTH;

				
			

ویژگی‌های اصلی SPFILE

  • باینری است
  • توسط Oracle مدیریت می‌شود
  • برای ذخیره تغییرات پایدار بسیار مناسب است
  • در محیط عملیاتی انتخاب استاندارد محسوب می‌شود
  • برای RAC، ASM و مدیریت حرفه‌ای بسیار بهتر از PFILE است
  •  

تفاوت PFILE و SPFILE در Oracle

حالا برسیم به اصل ماجرا.

اگر بخواهیم تفاوت PFILE و SPFILE را کاملاً روشن و شفاف بگوییم، باید از چند زاویه نگاه کنیم.

۱) تفاوت در ساختار فایل

PFILE
  • فایل متنی ساده
  • با vi، nano یا Notepad قابل ویرایش
SPFILE
  • فایل باینری
  • فقط باید از طریق دستورات Oracle مدیریت شود

نتیجه:

اگر دنبال خوانایی و مشاهده مستقیم تنظیمات هستی، PFILE راحت‌تر است.

اگر دنبال مدیریت استاندارد و امن‌تر هستی، SPFILE بهتر است.

۲) تفاوت در نحوه تغییر پارامترها

در PFILE، برای تغییر یک پارامتر باید فایل را دستی ویرایش کنی.

مثلاً:

				
					processes=600

				
			

بعد هم باید دیتابیس را Restart کنی.

اما در SPFILE می‌توانی از SQL استفاده کنی:

				
					ALTER SYSTEM SET processes=600 SCOPE=SPFILE;

				
			

این یعنی تغییرات ساخت‌یافته‌تر، تمیزتر و قابل‌کنترل‌تر هستند.

۳) تفاوت در ماندگاری تغییرات

یکی از مهم‌ترین تفاوت‌ها همین‌جاست.

در SPFILE اگر از ALTER SYSTEM استفاده کنی، تغییرات می‌توانند به‌صورت دائم ذخیره شوند.

مثلاً:

				
					ALTER SYSTEM SET sga_target=4G SCOPE=SPFILE;

				
			

این مقدار بعد از Restart هم باقی می‌ماند.

اما در PFILE، چون Oracle فایل را خودش مدیریت نمی‌کند، باید دستی آن را تغییر بدهی.

یعنی اگر فقط مقدار حافظه در RAM عوض شود ولی فایل را اصلاح نکنی، بعد از Restart همه چیز به حالت قبلی برمی‌گردد.

۴) تفاوت در Startup دیتابیس

Oracle هنگام Startup معمولاً اول سراغ SPFILE می‌رود و اگر آن را پیدا نکند، از PFILE استفاده می‌کند.

ترتیب رایج جستجو معمولاً به این شکل است:

				
					۱.spfile<SID>.ora
۲.spfile.ora
۳.init<SID>.ora
				
			

بنابراین در محیط‌های امروزی، اگر SPFILE وجود داشته باشد، معمولاً فایل اصلی Startup همان است.

۵) تفاوت در مدیریت محیط های عملیاتی

در محیط های عملیاتی، تقریباً همیشه SPFILE انتخاب حرفه‌ای‌تر است.

چون:

  • تغییرات از طریق SQL انجام می‌شود
  • خطای دستی کمتر است
  • برای automation مناسب‌تر است
  • با RAC و ASM سازگاری بهتری دارد
  • Oracle آن را به‌عنوان روش استاندارد می‌شناسد

در عوض، PFILE بیشتر نقش فایل کمکی، بکاپ تنظیمات و ابزار عیب‌یابی را دارد.

۶) تفاوت در Recovery و Troubleshooting

اینجا دقیقاً جایی است که PFILE می‌درخشد.

فرض کن SPFILE خراب شده یا اشتباه تنظیم شده و دیتابیس دیگر بالا نمی‌آید.

در این حالت، داشتن یک PFILE سالم می‌تواند نجاتت بدهد.

مثلاً:

				
					STARTUP PFILE='/tmp/initORCL_backup.ora';

				
			

بعد از اینکه دیتابیس بالا آمد و تنظیمات اصلاح شد، می‌توانی دوباره از روی PFILE یک SPFILE بسازی:

				
					ALTER SYSTEM SET processes=600 SCOPE=SPFILE;

				
			

پس در بحران، PFILE خیلی ارزشمند می‌شود.

PFILE بهتر است یا SPFILE؟

اگر بخواهم خیلی انسانی و صادقانه جواب بدهم:

  • اگر DBA یک دیتابیس محیط عملیاتی هستی، تقریباً همیشه باید از SPFILE استفاده کنی.
  • اگر درگیر Recovery، تست، Startup اضطراری یا Troubleshooting هستی، PFILE فوق‌العاده مهم می‌شود.
  • بهترین حالت این است که:
    • SPFILE فایل اصلی کار باشد
    • PFILE نسخه متنی پشتیبان و نجات‌بخش تو باشد

مثال: تغییر پارامتر processes

فرض کن تعداد اتصال‌های اپلیکیشن زیاد شده و باید ظرفیت processها را بالا ببری.

اگر SPFILE داشته باشی

				
					ALTER SYSTEM SET processes=800 SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;

				
			

چون processes معمولاً پارامتر static است، بعد از Restart اعمال می‌شود.

اگر PFILE داشته باشی

فایل را دستی باز می‌کنی:

				
					processes=800

				
			

بعد:

				
					SHUTDOWN IMMEDIATE;
STARTUP PFILE='/u01/app/oracle/product/19.0.0/dbhome_1/dbs/initORCL.ora';

				
			
				
					ALTER SYSTEM SET processes=600 SCOPE=SPFILE;

				
			

مثال: تغییر open_cursors

این پارامتر برای خیلی از اپلیکیشن‌ها مهم است.

اگر SPFILE داشته باشی

				
					ALTER SYSTEM SET processes=800 SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;

				
			

اگر dynamic باشد، همان لحظه اعمال می‌شود و بعد از Restart هم باقی می‌ماند.

اگر PFILE داشته باشی

باید فایل را ویرایش کنی:

				
					open_cursors=1500

				
			

و سپس Restart انجام بدهی.

چطور بفهمیم دیتابیس با SPFILE بالا آمده یا PFILE؟

خیلی ساده:

				
					SHOW PARAMETER spfile;

				
			

اگر مسیر فایل نمایش داده شود، یعنی دیتابیس با SPFILE بالا آمده است.

اگر مقدار خالی باشد، یعنی احتمالاً با PFILE کار می‌کنی.

ساخت SPFILE از روی PFILE

اگر فعلاً دیتابیس تو با PFILE کار می‌کند و می‌خواهی آن را به حالت استانداردتر ببری:

				
					CREATE SPFILE FROM PFILE;

				
			

یا:

				
					CREATE SPFILE='/u01/app/oracle/product/19.0.0/dbhome_1/dbs/spfileORCL.ora'
FROM PFILE='/u01/app/oracle/product/19.0.0/dbhome_1/dbs/initORCL.ora';

				
			

بعد:

				
					SHUTDOWN IMMEDIATE;
STARTUP;

				
			

ساخت PFILE از روی SPFILE

این یکی از مهم‌ترین کارهایی است که هر DBA باید بلد باشد:

				
					CREATE PFILE FROM SPFILE;

				
			

یا:

				
					CREATE PFILE='/backup/initORCL_backup.ora' FROM SPFILE;

				
			

این دستور برای بکاپ گرفتن از تنظیمات Oracle فوق‌العاده مهم است.

تفاوت v$parameter و v$spparameter

برای بررسی پارامترها دو View خیلی مهم داریم:

پارامترهای فعلی Instance

				
					SELECT name, value, issys_modifiable
FROM v$parameter
WHERE name IN ('processes','open_cursors','sga_target');

				
			

پارامترهای ذخیره‌شده در SPFILE

				
					SELECT name, value, sid
FROM v$spparameter
WHERE name IN ('processes','open_cursors','sga_target');

				
			
تفاوت اصلی
  • v$parameter = وضعیت فعلی دیتابیس
  • v$spparameter = وضعیت ذخیره‌شده در SPFILE

اگر پارامتری را با SCOPE=SPFILE تغییر داده باشی ولی هنوز Restart نکرده باشی، این تفاوت را خیلی واضح می‌بینی.

مزایا و معایب PFILE

مزایا

  • ساده و قابل‌فهم
  • خوانایی بالا
  • قابل ویرایش مستقیم
  • مناسب Recovery
  • عالی برای Troubleshooting

معایب

  • خطای انسانی زیاد
  • نیاز به ویرایش دستی
  • برای محیط‌های بزرگ حرفه‌ای نیست
  • برای RAC و ASM مناسب‌ترین گزینه نیست

مزایا و معایب SPFILE

مزایا

  • استاندارد Oracle
  • مناسب محیط های عملیاتی
  • قابل مدیریت با SQL
  • ذخیره دائمی تغییرات
  • مناسب Automation
  • بهتر برای RAC و ASM
  •  

معایب

  • قابل‌خواندن با editor نیست
  • برای Recovery گاهی نیاز به PFILE پیدا می‌کنی
  • اگر بکاپ متنی نداشته باشی، Troubleshooting سخت‌تر می‌شود

بهترین روش استفاده از PFILE و SPFILE

اگر بخواهم تجربه‌محور و واقعی بگویم، این بهترین رویکرد است:

۱) در Production از SPFILE استفاده کن

این روش استاندارد، امن‌تر و حرفه‌ای‌تر است.

۲) همیشه از SPFILE خروجی PFILE بگیر

مثلاً بعد از هر تغییر مهم:

				
					CREATE PFILE='/backup/initORCL_2026-06-03.ora' FROM SPFILE;

				
			

۳) قبل از تغییر پارامترهای حساس، بکاپ داشته باش

هم از فایل، هم از مقادیر پارامترها.

۴) برای پارامترهای static از قبل برنامه Restart داشته باش

چون همه تغییرات فوری اعمال نمی‌شوند.

۵) SPFILE را مستقیم دستکاری نکن

فقط با دستورات Oracle تغییر بده.

سوالات متداول درباره تفاوت PFILE و SPFILE در اوراکل

تفاوت اصلی PFILE و SPFILE در Oracle این است که PFILE یک فایل متنی قابل ویرایش دستی است، اما SPFILE یک فایل باینری است که توسط خود Oracle مدیریت می‌شود.

در PFILE، مدیر دیتابیس باید پارامترها را مستقیماً داخل فایل تغییر دهد، ولی در SPFILE می‌توان تنظیمات را با دستوراتی مثل ALTER SYSTEM تغییر داد و این تغییرات را به‌صورت دائمی ذخیره کرد.

به‌صورت خلاصه:

  • PFILE برای خوانایی، ویرایش دستی و عیب‌یابی مناسب است
  • SPFILE برای مدیریت حرفه‌ای و ذخیره پایدار تنظیمات بهتر است

به همین دلیل، در بیشتر محیط‌های عملیاتی Oracle، SPFILE انتخاب استاندارد محسوب می‌شود.

اگر هدف تو مدیریت حرفه‌ای و پایدار Oracle Database باشد، معمولاً SPFILE بهتر از PFILE است.

چون SPFILE این امکان را می‌دهد که پارامترهای دیتابیس را با دستورات Oracle تغییر دهی و تغییرات بعد از Restart هم باقی بمانند.

اما این به معنی بی‌فایده بودن PFILE نیست.

در واقع:

  • برای محیط های عملیاتی بهتر است از SPFILE استفاده شود
  • برای Recovery، Troubleshooting و Startup اضطراری داشتن PFILE خیلی مهم است

بهترین روش این است که:

  • دیتابیس با SPFILE بالا بیاید
  • و در کنار آن، یک PFILE بکاپ هم همیشه داشته باشی

این ترکیب هم امنیت می‌دهد، هم انعطاف‌پذیری.

برای اینکه بفهمی Oracle Database با PFILE بالا آمده یا SPFILE، ساده‌ترین راه اجرای دستور زیر است:

SHOW PARAMETER spfile;

در Oracle می‌توان خیلی راحت بین PFILE و SPFILE تبدیل انجام داد.

ساخت SPFILE از روی PFILE

اگر یک فایل متنی init.ora داری و می‌خواهی آن را به SPFILE تبدیل کنی، از این دستور استفاده کن:

CREATE SPFILE FROM PFILE;

یا با مسیر مشخص:

CREATE SPFILE=’/u01/app/oracle/product/19.0.0/dbhome_1/dbs/spfileORCL.ora’
FROM PFILE=’/u01/app/oracle/product/19.0.0/dbhome_1/dbs/initORCL.ora’;

ساخت PFILE از روی SPFILE

اگر بخواهی از SPFILE یک نسخه متنی برای بکاپ یا Recovery بگیری:

CREATE PFILE FROM SPFILE;

یا:

CREATE PFILE=’/backup/initORCL_backup.ora’ FROM SPFILE;

این کار یکی از مهم‌ترین Best Practiceها در Oracle است، چون در زمان خرابی SPFILE یا نیاز به Troubleshooting، داشتن PFILE خیلی کمک‌کننده است.

جمع‌بندی

اگر بخواهیم خیلی روان و ماندگار جمع‌بندی کنیم:

  • PFILE فایل متنی، ساده و مناسب عیب‌یابی است
  • SPFILE فایل باینری، حرفه‌ای و مناسب مدیریت روزمره محیط غملیاتی است
  • برای عملیات استاندارد Oracle، SPFILE انتخاب اصلی است
  • برای زمان بحران، خرابی یا Startup اضطراری، PFILE برگ برنده توست
یک جمله ساده برای به‌خاطر سپردن

SPFILE برای کار حرفه‌ای روزانه است، PFILE برای زمان نجات و عیب‌یابی.

سؤالی درباره این مقاله داری؟

اگر نکته‌ای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفت‌وگوی واقعی 💬

برو به صفحه پرسش و پاسخ

میثم راد

من یه برنامه نویسم که حسابی با دیتابیس اوراکل رفیقم! از اونایی ام که تا چیزی رو کامل نفهمم،ول کن نیستم، یادگرفتن برام مثل بازیه، و نوشتن اینجا کمک می کنه تا چیزایی که یاد گرفتم رو با بقیه به شریک بشم، با هم پیشرفت کنیم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *