参数文件是一个很小的文件,包含数据库一些参数的配置(数据库名、版本,内存设置,块大小,控制文件路径,进程数和会话数等)。在数据库启动时,Oracle读取参数文件,并根据参数文件中的参数设置来配置数据库。如内存池的分配,允许打开的进程数和会话数等。
1、参数文件分类
参数文件可分为两类:
pfile:文本文件的参数文件,可以使用vi,vim等编辑器修改,文件名通常为init<sid>.ora。路径:$ORALCE_HOME/dbs/init$ORALCE_SID.ora
spfile:二进制的参数文件,不能直接修改,只能存放在Oracle服务器端,可以使用EM或指令来修改
(alter system|session set parameter_name = values <>), 文件名通常为spfile<sid>.ora,支持RMAN备份。路径:$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora
参数文件优先级:
spfile<sid>.ora --> spfile.ora -->init<sid>.ora
spfile可以不存在
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
如果参数文件都不存在,数据库启动时报错
SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/11.2.0/db_1/dbs/initbpas.ora'
2、参数文件之间的转化
两类参数文件可以相互转化
2.1、生成spfile
1)从pfile默认路径生成:create spfile from pfile; 生产的spfile保存在$ORACLE_HOME/dbs/目录下,文件名是:spfile$ORACLE_SID.ora。
2)从pfile指定路径生成:create spfile = '/u01/app/oracle/product/11.2.0/db_1/dbs/test/spfilebpas1.ora' from pfile;
3)用指定路径的pfile生成:create spfile from pfile = '/u01/app/oracle/product/11.2.0/db_1/dbs/initbpas.ora';
4)从memeory中生成,适用于11g以上版本:create spfile = '/u01/app/oracle/product/11.2.0/db_1/dbs/test/spfilebpas2.ora' from memory;
2.2、生成pfile文件
从spfile默认路径生成:create pfile from spfile; 生产的spfile保存在$ORACLE_HOME/dbs/目录下,文件名是:init$ORACLE_SID.ora。
pfile也可以指定路径或者从memory中生成,和spfile命令相同。
2.3、查看参数文件内容
1)可以在服务器上查看,命令:cat /u01/app/oracle/product/11.2.0/db_1/dbs/initbpas.ora
2)可以下载到本地查看
3)可以在sqlplus工具中查看,命令:ho cat /u01/app/oracle/product/11.2.0/db_1/dbs/initbpas.ora
3、查看当前使用参数文件类型
1)可以使用select distinct isspecified from v$spparameter;语句查询,如果返回TRUE说明是spfile文件启动,FALSE说明是pfile文件启动。也可能两个值都有,说明先spfile再pfile。
2)还可以通过alter system set parameter = value scope = spfile;命令查看。
例如:alter system set sga_target = 200m scope = spfile;
如果是从spfile启动不报错,否则报错:
ERROR at line 1:
ORA-32001: write to SPFILE requested but no SPFILE is in use
说明:
scope的参数
memory : 只对当前实例有效,下次启动则失效
spfile : 只对spfile 修改,必须经过下一次启动才生效,当前的实例没有修改
both :内存与参数文件都将修改,当不指定scope时,缺省为both.