deferred指定系统修改是否只对以后的会话生效(对当前建立的会话无效,包括执行此修改的会话)。默认情况下,alter system命令会立即生效,但是有些参数不能"立即"修改,只能为新建立的会话修改这些参数。可以使用以下查询来看看哪些参数要求必须使用deferred:
SQL> 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
上面的代码表明,sort_area_size可以在系统修改,但是必须以延迟方式修改。以下代码显示了有deferred选项和没有deferred选项时修改这个参数的值会有什么结果:
SQL> alter system set sort_area_size=65536;
alter system set sort_area_size=65536
*
第 1 行出现错误:
ORA-02096: 此选项的指定初始化参数不可修改
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=设置。
取消spfile中的值设置 alter system reset parameter <scope=memory|spfile|both> sid='sid|*'