ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 读《Oracle 9i&10g编程艺术》记录--- spfile

读《Oracle 9i&10g编程艺术》记录--- spfile

原创 Linux操作系统 作者:andyxu 时间:2009-07-22 14:54:16 0 删除 编辑

使用startup命令来启动oracle,oracle搜索参数配置文件的顺序是:    
    a. spfile${ORACLE_SID}.ora 
    b. spfile.ora
    c. init${ORACLESID}.ora
    d. init.ora

SPFILE是二进制文件,它们可不能用文本编辑器来编辑。使用ALTER SYSTEM命令可进行参数修改,语法如下(< > 中的部分是可选的,其中的管道符号(|)表示“取候选列表中的一个选项”):
Alter system set parameter=value  
默认情况下,ALTER SYSTEM SET命令会更新当前运行的实例,并且会修改SPFILE,这就大大简化了管理;原先使用init.ora参数文件时,通过ALTER SYSTEM命令设置参数后,如果忘记更新init.ora参数文件,或者把init.ora参数文件丢失了,就会产生问题,使用SPFILE则会消除这些问题。
记住这一点,下面来详细分析这个命令中的各个元素:
􀂉 parameter=value这个赋值提供了参数名以及参数的新值。例如,pga_aggregate_target = 1024m会把PGA_AGGREGATE_TARGET参数值设置为1,024 MB(1 GB)。
􀂉 comment='text'是一个与此参数设置相关的可选注释。这个注释会出现在V$PARAMETER视图的UPDATE_COMMENT字段中。如果使用了相应选项允许同时保存对SPFILE的修改,注释会写入SPFILE,而且即便服务器重启也依然保留,所以将来重启数据库时会看到这个注释。
􀂉 deferred指定系统修改是否只对以后的会话生效(对当前建立的会话无效,包括执行此修改的会话)。默认情况下,ALTER SYSTEM命令会立即生效,但是有些参数不能“立即”修改,只能为新建立的会话修改这些参数。可以使用以下查询来看看哪些参数要求必须使用deferred:
ops$tkyte@ORA10G> select name
2 from v$parameter
3 where ISSYS_MODIFIABLE = 'DEFERRED';
NAME
------------------------------
backup_tape_io_slaves
audit_file_dest
object_cache_optimal_size
object_cache_max_size_percent
sort_area_size
sort_area_retained_size
olap_page_pool_size
7 rows selected.
上面的代码表明,SORT_AREA_SIZE可以在系统级修改,但是必须以延迟方式修改。以下代码显示了有deferred选项和没有deferred选项时修改这个参数的值会有什么结果:
ops$tkyte@ORA10G> alter system set sort_area_size = 65536;
alter system set sort_area_size = 65536
                              *
ERROR at line 1:
ORA-02096: specified initialization parameter is not modifiable with this option
ops$tkyte@ORA10G> alter system set sort_area_size = 65536 deferred;
System altered.
􀂉 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=设置。
这个命令的典型用法很简单:
ops$tkyte@ORA10G> alter system set pga_aggregate_target=1024m;
System altered.
或者,更好的做法是,还可以指定COMMENT=赋值来说明何时以及为什么执行某个修改。

如果需要删除修改的参数值,也通过ALTER SYSTEM命令来完成,但是要使用RESET子句:
Alter system reset parameter sid='sid|*'
在这里,SCOPE/SID 设置的含义与前面一样,但是SID=部分不再是可选的。要从SPFILE“删除”参数设置,也就是仍然采用参数原来的默认值,就要使用这个命令。所以,举例来说,如果我们想删除SORT_AREA_SIZE,以允许使用此前指定的默认值,可以这样做:
sys@ORA10G> alter system reset sort_area_size scope=spfile sid='*';
System altered.
这样会从SPFILE中删除SORT_AREA_SIZE。

spfile转换为pfile文件使用命令:
create pfile from spfile;
pfile转换为spfile文件使用:
create spfile from pfile;

SPFILE中的二进制数据量很小。
如果在UNIX平台上,只需一个简单的strings命令就能提取出所有设置:
strings spfile$ORACLE_SID.ora
在Windows上,则要用write.exe(WordPad,即写字板)打开这个文件。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/110321/viewspace-609910/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-06-26

  • 博文量
    167
  • 访问量
    291966