The Oracle spfile
is a binary representation of the
text0based init.ora file.
By
default, a new Oracle database will be
working on a pfile, so the spfile must
be created from the pfile at the SQL
prompt.
Also see my notes on
using spfile and pfile.
The spfile
is created using the CREATE SPFILE
statement; this requires connecting as
SYSDBA.
Connect system/manager as sysdba;
CREATE
SPFILE FROM PFILE;
This
command creates an spfile in a
non-default location ($ORACLE_HOME/database).
However, you can fully-qualify the path
name is the ?create spfile? statement:
CREATE
SPFILE='/u01/admin/prod/pfile/file_mydb.ora'
FROM
PFILE=/u01/admin/prod/pfile/initprod.ora';
Warning - After an spfile is created,
when you bounce the database you may
encounter an error. To get around this,
you have to reconnect as SYSDBA and use
the STARTUP command.
The
addition of the spfile has changed the
search path for the Oracle startup deck.
Oracle now uses the following path:
-
Search
for the spfile$ORACLE_SID.ora file
in the default location,
-
Look
for the spfile.ora; and
-
Search
for the pfile by name
init$ORACLE_SID.ora.
Specifying SCOPE in parameters
Once you
have an spfile, you can change any
initialization parameter with the ?alter
system? command. However, there is an
important SCOPE parameter that you need
to understand.
The SCOPE
parameter has three values MEMORY,
SPFILE and BOTH. Let's look at an
example of each:
Alter
system set db_2k_cache_size=100m
SCOPE=SPFILE;
If you
want to make a change to a parameter in
the spfile without affecting the current
instance, you can do so using the
SCOPE=SPFILE option of the ALTER SYSTEM
statement. This is useful when you want
to make a change starting from the next
startup and not for the current instance.
Alter
system set db_2k_cache_size=100m
SCOPE=MEMORY;
In the
example above, the SCOPE=MEMORY tells
Oracle to make the change for the life
of the instance, and to change it back
to the default value the next time the
database is bounced.
Alter
system set db_2k_cache_size=100m
SCOPE=BOTH;
When you
specify SCOPE=BOTH, the change will be
made immediately, and Oracle will also
make the change permanent, even after
the database is bounced. |