טיפ קטן שיכול לחסוך לכם כאב ראש גדול הוא היכולת ליצור מקובץ ה SPFILE קובץ PFILE (ולהפך) .
מתי נצטרך להשתמש בטכניקה הזו ?
שימו לב לתרחיש הבא :
RAM >SHOW PARAMETER log_archive_format NAME TYPE VALUE ------------------------------------ ----------- ------------- log_archive_format string ARC%S_%R.%T RAM >SELECT name, value, issys_modifiable 2 FROM v$parameter 3 WHERE name = 'log_archive_format' ; NAME VALUE ISSYS_MOD ------------------- ----------- -------------------- log_archive_format ARC%S_%R.%T FALSE
נאמר כי מסיבה כלשהי אני רוצה לשנות את ערכו של הפרמטר, משום שהוא סטטי אני צריך להשתמש בפקודת ה SCOPE = SPFILE
ALTER SYSTEM SET log_archive_format = 'RAM' SCOPE = SPFILE ; System altered.
באמצעות תשאול טבלת המערכת v$spparameter ניתן לראות את ערכו החדש כפי שהוא מופיע ב SPFILE, עד כאן הכל תקין…
RAM >SELECT name, value 2 FROM v$spparameter 3 WHERE name = 'log_archive_format' ; NAME VALUE -------------------- ------------- log_archive_format RAM
כעת לצורך פעולות תחזוקה שונות אני מכבה את ה Database ולאחר מכן מנסה להפעיל אותו מחדש
RAM >CONN / AS SYSDBA Connected. SYS >SHUTDOWN IMMEDIATE Database closed. Database dismounted. ORACLE instance shut down. SYS >STARTUP ORA-19905: log_archive_format must contain %s, %t and %r
שימו לב לשגיאה, עכשיו אורקל "נזכר" להגיד לי שהפרמטר שהוגדר קודם לכן לערך 'RAM' לא יכול לקבל את הערך הזה, ולכן הוא ממאן לעלות .. (התנהגות זו יכולה לבוא לידי ביטוי גם בפרמטרים סטטיים אחרים)
SYS >SELECT status FROM v$instance ; SELECT status FROM v$instance * ERROR at line 1: ORA-01034: ORACLE not available Process ID: 0 Session ID: 50 Serial number: 1740
במקרים כאלו אפשר להשתמש בפקודת ה CREATE PFILE FROM SPFILE ולייצר קובץ PFILE מקובץ ה SPFILE הלא תקין.
SYS >CREATE PFILE FROM SPFILE ; File created.
לאחר מכן, נכנס לקובץ ה PFILE ידנית ונשנה שוב את ערך הפרמטר לערכו התקין
לאחר שקובץ ה PFILE תוקן, כל שעלינו לעשות הוא לייצר ממנו SPFILE חדש (ובכך לדרוס את הקודם) ולהפעיל את ה Database
SYS >CREATE SPFILE FROM PFILE ; File created. SYS >STARTUP ORACLE instance started. Total System Global Area 535662592 bytes Fixed Size 1375792 bytes Variable Size 306184656 bytes Database Buffers 222298112 bytes Redo Buffers 5804032 bytes Database mounted. Database opened. SYS >SELECT status FROM v$instance ; STATUS ------------ OPEN