
اگر با 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.ora
۲.spfile.ora
۳.init.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 برای زمان نجات و عیبیابی.
سؤالی درباره این مقاله داری؟
اگر نکتهای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفتوگوی واقعی 💬
برو به صفحه پرسش و پاسخ
دیدگاهتان را بنویسید