一旦根据spfile启动并运行数据库,如何设置和修改其中有的值。spfile是二进制文件,它们可不能用文本编辑器来编辑。可以用alter system命令,语法如下: <>中部分是可选的,| 管道符号表示取一个选项
     alter system set parameter=value <comment='text'> <deferred> <scope=memory|spfile|both><sid='sid|*'>

parameter=value这个赋值提供了参数名以及参数的新值。例如,pga_aggregate_target = 1024m 会把PGA_AGGREGATE_TARGET参数值设置为1024MB(1GB).

comment='text'是一个与此参数设置相关的可选注释。这个注释会出现在v$PARAMETER视图的UPDATE_COMMENT字段中。如果使用了相应选项允许同时保存对SPFILE的修改,注释会写入SPFILE,而且即使服务器重启也依然保留,所以将来重启数据库时会看到这个注释。

deferred指定系统修改是否只对以后的会话生效(对当前建立的会话无效,包括执行此修改的会话)。默认情况下,alter system命令会立即生效,但是有些不能“立即”修改,只有新建立的会话修改这些参数。可以使用以下查询来看看哪些参数要求必须使用deferred:
select name from v$parameter where ISSYS_MODIFIABLE = 'DEFERRED';
NAME
------------------------------------
backup_tape_io_slaves
recyclebin
audit_file_dest
object_cache_optimal_size
object_cache_max_size_percent
sort_area_size
sort_area_retained_size
olap_page_pool_size
已选择8行。

上面代码表明sort_area_size可以在系统级修改,但必须以延迟的方式修改。
SQL> alter system set sort_area_size = 65536;
ERROR at line 1:
ORA-02096: specified initialization parameter is not modifiable with this option
SQL> alter system set sort_area_size = 65536 deferred;
系统已更改。

scope-memory|spfile|both指示了这个参数设置的“作用域”。设置参数值时,作用域有以下选择:

scope=memory只在实例中修改; 数据库重启后将不再保存。下一次重启数据库时,设置还是修改前的样子。
scope=spfile只修改spfile中的值。数据库重启并再次处理spfile之前,这个修改不会生效。有些参数只能使用这个选项来修改,如processes就必须使用scope=spfile,因为我们无法修改活动实例的processes值.
scope=both是指,内存和spfile中都会完成参数修改。这个修改将反映在当前实例中,下一次重启时,这个修改也会生效。这是使用spfile时默认的作用域值。如果使用init.ora参数文件,默认值则为scope=memory,这也是此时惟一合法的值。

sid='sid|*'主要用于集群环境;默认值为sid='*'.这样可以为集群中任何给定的实例惟一地指定参数设置。除非你使用Oracle RAC,否则一般不需要指定sid=设置.
SQL> alter system set pga_aggregate_target=1024m comment = ' changed 15-Oct-2012 as per recommendation of George';
SQL>select value,update_comment from v$parameter where name='pga_aggregate_target';

取消SPFILE中的值设置
alter system reset parameter <scope=memory|spfile|both> sid='sid|*'