Oracle的参数文件对于Oracle至关重要。没有参数文件。Oracle无法启动。
参数文件分为
spfile文件,oracle9iR1之后新增的参数文件,为二进制文件,不可以直接编辑
pfile文件,文本文件,可以直接编辑,
这两种文件可以相互转换。
一:使用参数文件启动oracle
对于Oracle而且默认读取的顺序为:
1.1:优先读取:spfile启动oracle,读取的文件为:
$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora
1.2:如果不存在文件spfile$ORACLE_SID.ora,则读取另一个spfile文件:
$ORACLE_HOME/dbs/spfile.ora
1.3:当前面两个文件均不存在时。则读取pfile文件启动。pfile文件为:
$ORACLE_HOME/dbs/init$ORACLE_SID.ora
在某些状态下,可能需要指定pfile的启动方式,可以手工指定pfile来启动oracle数据库.方式为:
1.4:有一个合法的pfile文件,但是不符合oracle的默认读取命令以及路径,则使用
plsql>startup pfile='/u1/app/oracle/product/10.2.0/db_1/dbs/initest2.ora'
1.5:对于用于启动oracle的指定pfile文件,其内容还可以采用如下方式
initest2.ora的内容为:
IFILE='/u1/app/oracle/product/10.2.0/db_1/pfile/init.ora'
IFILE 指令与 C 中的#include 很类似。它会在当前文件中包含指定文件的内容。前面的指令就会包含一个非默认位置上的 init.ora 文件。
当使用:plsql>startup pfile='/u1/app/oracle/product/10.2.0/db_1/dbs/initest2.ora'来启动数据库时。就表示其实使用的
pfile文件为:'/u1/app/oracle/product/10.2.0/db_1/pfile/init.ora'
1.6:pfile文件还可以重定向到spfile文件。initest2.ora的内容为:
#Pfile link to SPFILE
SPFILE= '/u1/app/oracle/product/10.2.0/db_1/spfile123.ora'
log_archive_start = false
则使用plsql>startup pfile='/u1/app/oracle/product/10.2.0/db_1/dbs/initest2.ora'来启动数据库时。会使用spfile123.ora来启动数据库,并且pfile中指定的
参数log_archive_start = false 会覆盖spfile123.ora中的相同指定参数值。
该状况主要可用于一种状况,如:由于误操作。导致修改了Spfile中的sga_target=2147483648,超过了系统的内存限制。会导致启动失败。
此时。可以使用pfile,并在pfile中指定spfile文件。以及附加参数sga_target=524288000. 这样就可以启动了。
二,参数文件的修改:
2.A:pfile文件可以直接用文本编辑器进行修改
2.B:spfile文件的修改在oracle中使用命令
Alter system set parameter=value <comment='text'> <deferred> <scope=memory|spfile|both> <sid='sid|*'>
注:<>内的部分为可选
2.1 对于<comment='text'>,用于DBA更新参数文件时。添加注释。便于追踪参数的修改历史
例如:alter system set pga_aggregate_target=775M comment='Update by harvey test 2 2010-4-28';
则:可查询v$parameter中的UPDATE_COMMENT字段。对于参数pga_aggregate_target记录会有所更新的注释
另:经过实验表明。对于同一个参数的多次修改。仅会保留其最后一次的修改注释,如果最后一次没有指定注释信息,
则UPDATE_COMMENT会为空。
2.2:deferred 指定系统修改是否只对以后的会话生效(对当前建立的会话无效,包括执行此修
改的会话)。默认情况下,ALTER SYSTEM 命令会立即生效,但是有些参数不能“立即”修改,只
能为新建立的会话修改这些参数。可以使用以下查询来看看哪些参数要求必须使用 deferred:
select name from v$parameter where ISSYS_MODIFIABLE = 'DEFERRED';
2.3:<scope=memory|spfile|both> ,memory表示仅对当前运行实例生效,并不修改spfile。spfile表示仅修改spfile,当前实例不改变
both表示修改spfile并对当前运行实例生效。默认如果不指定scope,则取值为both
注:当指定pfile启动数据库时。则默认该选项为:memory。指定both,spfile均为提示错误:
ORA-32001: write to SPFILE requested but no SPFILE specified at startup
2.4:<sid='sid|*'> 主要用于集群环境;默认值为 sid='*'。这样可以为集群中任何给定的实例惟
一地指定参数设置。除非你使用 Oracle RAC,否则一般不需要指定 sid=设置,但是下面的2.5项例外
2.5: 取消 SPFILE 中的值设置---即我们根本不希望 SPFILE 有这个参数设置,想把它删掉,使用如下命令:
Alter system reset parameter <scope=memory|spfile|both> sid='sid|*'
注意:此处 SID=部分不再是可选的,必须指定sid才可以修改。
三:参数文件的转换:
3.1:pfile转换为spfile,
3.1.1:当使用默认的pfile文件$ORACLE_HOME/dbs/init$ORACLE_SID.ora 启动oracle时。命令如下;
create spfile from pfile; 默认生成的spfile为:$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora
3.1.2:当使用非默认的pfile文件启动时。必须指定pfile的完整路径名:
create spfile from pfile='/u1/app/oracle/product/10.2.0/db_1/dbs/initest2.ora'
注:还可以指定生成的spfile的路径和名称:create spfile='/u1/app/oracle/product/10.2.0/db_1/dbs/abc.ora' from pfile;
3.2: spfile转换为pfile.
3.2.1仅在当时用spfile启动oracle时。使用create pfile from spfile,得到的pfile为默认pfile
3.2.2:可以采用strings $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora 命令直接提取spfile中的文本内容
3.3:不论采用pfile或者spfile启动oracle,在启动之后,均可以采用
create pfile='xyz' from spfile='abc' 或者 create spfile='abc' from pfile='xyz' 来实现pfile和spfile的转换
四,spfile被破坏时的处理:
4.1:可以采用strings $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora 命令直接提取spfile中的文本内容生成pfile
4.2:如果没有pfile,则可以读取alter日志的内容。生成pfile
4.3:使用pfile来启动后。生成spfile。