Académique Documents
Professionnel Documents
Culture Documents
When an Oracle Instance is started, the characteristics of the Instance are established by
parameters specified within the initialization parameter file. These initialization parameters are
either stored in a PFILE or SPFILE. SPFILEs are available in Oracle 9i and above. All prior
releases of Oracle are using PFILEs.
SPFILEs provide the following advantages over PFILEs:
o An SPFILE can be backed-up with RMAN (RMAN cannot backup PFILEs)
o Reduce human errors. The SPFILE is maintained by the server. Parameters are checked
before changes are accepted.
o Eliminate configuration problems (no need to have a local PFILE if you want to start
Oracle from a remote machine)
o Easy to find - stored in a central location
What is the difference between a PFILE and SPFILE:
A PFILE is a static, client-side text file that must be updated with a standard text editor like
"notepad" or "vi". This file normally reside on the server, however, you need a local copy if you
want to start Oracle from a remote machine. DBA's commonly refer to this file as the INIT.ORA
file.
An SPFILE (Server Parameter File), on the other hand, is a persistent server-side binary file that
can only be modified with the "ALTER SYSTEM SET" command. This means you no longer
need a local copy of the pfile to start the database from a remote machine. Editing an SPFILE
will corrupt it, and you will not be able to start your database anymore.
How will I know if my database is using a PFILE or SPFILE:
Execute the following query to see if your database was started with a PFILE or SPFILE:
SQL> SELECT DECODE(value, NULL, 'PFILE', 'SPFILE') "Init File Type"
FROM sys.v_$parameter WHERE name = 'spfile';
You can also use the V$SPPARAMETER view to check if you are using a PFILE or not: if the
"value" column is NULL for all parameters, you are using a PFILE.
Viewing Parameters Settings:
One can view parameter values using one of the following methods (regardless if they were set
via PFILE or SPFILE):
o The "SHOW PARAMETERS" command from SQL*Plus (i.e.: SHOW PARAMETERS
timed_statistics)
o V$PARAMETER view - display the currently in effect parameter values
o V$PARAMETER2 view - display the currently in effect parameter values, but "List
Values" are shown in multiple rows
o V$SPPARAMETER view - display the current contents of the server parameter file.
Starting a database with a PFILE or SPFILE:
Oracle searches for a suitable initialization parameter file in the following order:
o Try to use the spfile${ORACLE_SID}.ora file in $ORACLE_HOME/dbs (Unix) or
ORACLE_HOME/database (Windows)
o Try to use the spfile.ora file in $ORACLE_HOME/dbs (Unix) or
ORACLE_HOME/database (Windows)
o Try to use the init${ORACLE_SID}.ora file in $ORACLE_HOME/dbs (Unix) or
ORACLE_HOME/database (Windows)
One can override the default location by specifying the PFILE parameter at database startup:
SQL> STARTUP PFILE='/oradata/spfileORCL.ora'
Note that there is not an equivalent "STARTUP SPFILE=" command. One can only use the
above option with SPFILE's if the PFILE you point to (in the example above), contains a single
'SPFILE=' parameter pointing to the SPFILE that should be used. Example:
SPFILE=/path/to/spfile
at STARTUP.
- SPFILE: update the SPFILE, the parameter will take effect with next database startup
- BOTH: affect the current instance and persist to the SPFILE. This is the default behaviour if an
SPFILE was used at STARTUP.
The COMMENT parameter (optional) specifies a user remark.
The SID parameter (optional; only used with RAC) indicates the instance for which the
parameter applies (Default is *: all Instances).
Use the following syntax to set parameters that take multiple (a list of) values:
SQL> ALTER SYSTEM SET utl_file_dir='/tmp/','/oradata','/home/' SCOPE=SPFILE;
Use this syntax to set unsupported initialization parameters (obviously only when Oracle Support
instructs you to set it):
SQL> ALTER SYSTEM SET "_allow_read_only_corruption"=TRUE SCOPE=SPFILE;
Execute one of the following command to remove a parameter from the SPFILE:
SQL> ALTER SYSTEM RESET timed_statistics SCOPE=SPFILE SID=*;
SQL> ALTER SYSTEM SET timed_statistics = '' SCOPE=SPFILE;
One can also specify a non-default location for either (or both) the PFILE and SPFILE
parameters. Look at this example:
SQL> CREATE SPFILE='/oradata/spfileORCL.ora' from
PFILE='/oradata/initORCL.ora';
Here is an alternative procedure for changing SPFILE parameter values using the above method:
o Export the SPFILE with: CREATE PFILE=pfilename FROM SPFILE = spfilename;
o Edit the resulting PFILE with a text editor
o Shutdown and startup the database with the PFILE option: STARTUP PFILE=filename
o Recreate the SPFILE with: CREATE SPFILE=spfilename FROM PFILE=pfilename;
o On the next startup, use STARTUP without the PFILE parameter and the new SPFILE
will be used.
Parameter File Backups:
RMAN (Oracle's Recovery Manager) will backup the SPFILE with the database control file if
setting "CONFIGURE CONTROLFILE AUTOBACKUP" is ON (the default is OFF). PFILEs
cannot be backed-up with RMAN. Look at this example:
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;