启动instance过程:
由上图可知,oracle instance是根据Initialization Parameter Files里设置的参数来初始化oracle instance的。
Initialization Parameter
Files的条目中包含显示和隐式两种参数,显示参数在文件中明确指出了参数值,隐式参数没有在文件中指定,均按oracle默认值。多个
Initialization Parameter Files可以同时存在。有两种类型的Initialization Parameter
Files:pfile(Static parameter file)和SPFILE(Persistent server parameter
file)。
pfile:
文本文件,可以用任何标识的系统文本编辑工具修改。在instance启动后只读,如果里面的内容被改变只能在下次启动instance后才能生效,oracle安装完后会自动生成一个简单模板$ORACLE_HOME/dbs/init.ora。
SPFILE:
二进制文件,只能由oracle server修改和维护,只能位于运行oracle server的机器上(pfile可以位于客户端),可以被RMAN备份。位置$ORACLE_HOME/dbs/spfileSID.ora。
由pfile创建spfile:CREATE SPFILE = ‘$ORACLE_HOME/dbs/spfileDBA01.ora’
FROM PFILE = ‘$ORACLE_HOME/dbs/initDBA01.ora’;(可以在instance启动前或启动后创建),在默认情况下可直接这样用:SQL> CREATE SPFILE FROM PFILE;
由spfile创建pfile:SQL> CREATE PFILE FROM SPFILE;
查看各个参数:如果是pfile则可以用编辑器打开,如果是spfile则有三种方式:一是由spfile创建pfile,然后再打开
pfile;二是利用Linux下的命令strings spfile;三是SQL> show parameter
“参数名的头几个字母”。
如:SQL> show parameter fast
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
fast_start_io_target integer 0
fast_start_mttr_target integer 300
fast_start_parallel_rollback string LOW
修改参数(spfile条件下):
ALTER SYSTEM SET parameter_name = parameter_value
[COMMENT 'text'] [deferred] [SCOPE = MEMORY|SPFILE|BOTH]
[SID= 'sid'|'*']
comment:添加注释。
deferred:延迟修改,下次启动时才修改。
scope:默认both。memory,只修改内存的值,临时修改,不会改变spfile里的值。spfile,只修改spfile里的值。both,既修改内存也修改spfile。对于pfile,scope选项只能修改memory。
sid:在rac环境下,指定修改那个instance。
例1:
SQL> show parameter fast_start_mttr_target
NAME TYPE VALUE
------------------------------------ ----------- -------------
fast_start_mttr_target integer 300
SQL>alter system set fast_start_mttr_target=250;
System altered.
SQL> show parameter fast_start_mttr_target
NAME TYPE VALUE
------------------------------------ ----------- -------------
fast_start_mttr_target integer 250
[oracle@localhost ~]$ strings ./dbs/spfilelty.ora | grep fast_start_mttr_target
*.fast_start_mttr_target=250
例2:SQL>alter system set fast_start_mttr_target=260 comment='hello world';
SQL> select name, value, update_comment from v$parameter where name='fast_start_mttr_target';
NAME VALUE UPDATE_COMMENT
-------------------- -------------------- --------------------
fast_start_mttr_targ 260 hello world
[oracle@localhost ~]$ strings ./dbs/spfilelty.ora | grep fast_start_mttr_target
*.fast_start_mttr_target=260#hello world
例3:
SQL> alter system set fast_start_mttr_target=300 scope=spfile;
System altered.
SQL> show parameter fast_start_mttr_target
NAME TYPE VALUE
------------------------------------ -----------
fast_start_mttr_target integer 260
[oracle@localhost ~]$ strings ./dbs/spfilelty.ora | grep fast_start_mttr_target
*.fast_start_mttr_target=300
延迟修改的参数:
删除spfile里的值即将参数值置为默认值:ALTER SYSTEM RESET parameter_name [SCOPE =
MEMORY|SPFILE|BOTH] [SID= ‘sid’|’*’]
startup命令行为:
当输入startup命令后,在$ORACLE_HOME/dbs/目录下查找初始化参数文件spfileSID.ora,启动
instance;若无这个文件则查找缺省spfile文件,启动instance;若无这个文件则查找initSID.ora这个文件并启动
instance。
指定一个pfile可以覆盖上述查找顺序,如:STARTUP PFILE =
$ORACLE_HOME/dbs/initDBA1.ora,直接用指定的pfile启动instance。在pfile里可以指定其他spfile,
在pfile里加入SPFILE=<full path and
filename>即可。这是唯一能用一个处于其他位置的spfile启动instance的方法。