CREATE PFILE FROM SPFILE

טיפ קטן שיכול לחסוך לכם כאב ראש גדול הוא היכולת ליצור מקובץ ה 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