2009-11-27,在对Oracle的学习过程中,尝试修改SPFILE里定义的初始化参数。直接打开SPFILE文件(Solaris平台下),用VI命令修改了其中的部分参数,修改强制保存后,数据库无法启动:出现如下错误:
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/opt/oracle/product/10gr2/dbs/initstevendb.ora'
原因:
spfile以二进制格式存放,不支持直接对文件的修改。强制修改就改变文件类型。
知识点分析:
1. Oracle10启动需要一个参数文件,查找启动参数文件的顺序如下:
spfile<ORACLE_SID>.ora-->spfile.ora-->init<ORACLE_SID>.ora,由上面的错误显示可以看出Oracle启动时,依次尝试寻找三个参数文件,直至尝试用最后一个文件initstevendb.ora启动失败。
查看spfile location的方法:
SQL>show parameter spfile;
2. Oracle启动参数的修改可以在SQL*PLUS下动态进行,修改及时生效,无需重启ORACLE生效。
语法:
alter system set parameter=value scope=spfile|both|memory;
或者将spfile文件导出生成pfile文件,pfile是文本文件,可以直接修改文件,后又将pfile导成spfile,启动数据库使修改生效。
语法:
$ su - oracle
$ sqlplus / as sysdba
SQL> create pfile from spfile;
File created.
$ vi init<ORACLE_SID>.ora
'修改参数‘
:wq '保存退出'
SQL> shutdown immediate;
SQL> startup pfile=$ORACLE_HOME/dbs/init<ORACLE_SID>.ora
SQL> create spfile from pfile;
3.spfile损坏后的恢复
Oralce数据库安装过程中,会生成一个pfile文件,存放于'/***/oracle/admin/$ORACLE_SID/pfile'目录下,文件名为:
init.ora.8232009110,后面的数字在不同的环境里有不同的值,可以根据这个pfile文件恢复spfile文件。
$ su - oracle
$ sqlplus / as sysdba
SQL> create spfile from spfile='/***/oracle/admin/$ORACLE_SID/pfile/init.ora.8232009110';
File created.
$startup