初始化参数文件spfile:是一个二级制文件,不能编辑,默认是放在$ORACLE_HOME/dbs下面,可以通过使用alter system来修改spfile里面的参数。
spfile文件是不可以编辑的,编辑了会损坏,但是可以使用strings来查看里面内容。
[oracle@Database2 dbs]$ strings spfileoradb.ora | more
oradb.__db_cache_size=1191182336
oradb.__java_pool_size=16777216
oradb.__large_pool_size=33554432
oradb.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
oradb.__pga_aggregate_target=419430400
oradb.__sga_target=1677721600
oradb.__shared_io_pool_size=0
oradb.__shared_pool_size=419430400
在linux、Unix下面,默认的目录$ORACLE_HOME/dbs中搜索参数文件,按照顺序spfile<ORACLE_SID>.ora->spfile.ora->init<ORACLE_SID>.ora查找参数文件。
修改参数有两种方式,一种是alter system是修改整个实例的参数,另外一个是alter session是针对当前会话生效。
Oracle的参数有两种,一种是动态的,一种是静态的。动态参数允许在内存当中修改修改完之后直接生效。如果这个参数不能在内存当中修改,那么这种参数就是静态的。
SQL> alter system set memory_max_target=1024m; ---这个不能直接在内存当中生效,是静态参数
alter system set memory_max_target=1024m
*
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified
SQL> alter system set memory_target=1000m; --这个可以直接修改,在内存当中生效
System altered.
可以通过视图 V$PARAMETER来查看那些参数可以修改后立刻生效。
SQL> SELECT NAME,ISSYS_MODIFIABLE FROM V$PARAMETER WHERE NAME LIKE 'memory%';
NAME ISSYS_MODIFIABLE
------------------------------ ----------------------------------------
memory_target IMMEDIATE --这个代表修改后在内存立刻生效,是动态的
memory_max_target FALSE --false代表是静态,不立刻生效
静态参数如果要修改使用scope=spfile这个选项
SQL> alter system set sga_max_size=0m scope=spfile;
System altered.
这里几个选项:(1)scope=memory,在内存当中修改,在当前实例生效,重启之后丢失,不生效(2)scope=spfile,在文件当中修改,重启实例生效(3)scope=both,在内存和spfile中修改,在当前实例生效,重启过后也生效(默认选项)
在没有指定scope的时候,默认使用的是both,在内存中和参数文件当中修改。
当使用spfile启动的时候报错,启动不到nomount状态下面就要使用spfile来创建pfile文件了,修改pfile里面的值来编辑参数。
SQL> startup force;
ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 1644M
将报错的参数修改为合适的值之后,再去用pfile创建spfile,用spfile启动。
SQL> create spfile from pfile;
File created.
SQL> startup force;
ORACLE instance started.
Total System Global Area 1302827008 bytes
Fixed Size 2262208 bytes
Variable Size 1119882048 bytes
Database Buffers 176160768 bytes
Redo Buffers 4521984 bytes
Database mounted.
Database opened.
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
spfile string /u01/app/oracle/product/11.2.0
/db_1/dbs/spfileoradb.ora
Oracle pfile文章请参考: pfile