1、 如果使用RMAN建议开启控制文件自动备份,当开启控制文件自动备份后,在系统结构发生变化时,将会自动对控制文件以及Spfile文件进行备份,这样在参数文件损坏时可以实现恢复,在RMAN中可以通过如下命令进行设置:
rman>configure controlfile autobackup on;----启动控制文件自动备份
rman>configure controlfile autobackup formate for device type disk to ‘/opt/oracle/obak/control%F’;----修改控制文件自动备份目录
这样在Spfile文件损坏时可以通过Rman备份进行恢复,如:
restore spfile to ‘/tmp/spfileorcl.ora’ from autobackup;
2、 如果没有对参数文件进行备份,但是却发生了参数文件损坏(比如误删除了/$ORACLE_HOME/dbs下的文件),那么恢复起来比较麻烦,可以通过如下一些步骤进行恢复:
首先不要执行shutdown命令来停止数据库,然后想办法来创建新的Spfile
(1)、Oracle9iR2之后,在使用DBCA最初创建数据库时缺省会在$ORACLE_BASE/admin/$ORACLE_SID/scripts目录下保存有一个init.ora文件,这个文件是在创建数据库的最后阶段用于创建启动默认的Spfile之用的,所以可以通过create spfile命令创建新的Spfile,但是当前数据库是以SPFILE创建的,因此直接执行该命令是不允许的,所以要创建一个与当前实例所使用的spfile名称不同的Spfile文件如:
Create spfile=’ $ORACLE_HOME/dbs/spfile1.ora’ from pfile=’ $ORACLE_BASE/admin/$ORACLE_SID/scripts/init.ora’;
然后通过更名方式恢复Spfile如:
cd $ORACLE_HOME/dbs;
mv spfile1.ora spfile$ORACLE_SID.ora;
(2)、通过上面操作就可以恢复初始参数,接下来要恢复已经变更的参数,因为数据库没有shutdown因此通过如下脚本可以找到当前实例的非缺省参数设置:
set linesize 120
set pagesize 999
set heading off
set feedback off
spool /tmp/inittmp.ora
select ‘*.’||name||’=’||value from v$parameter where isdefault=’false’;
spool off
通过运行上面的脚本,可以将当前实例的非缺省参数设置,转出到一个文本文件inittmp.ora中,然后使用这个文本文件逐个修改参数,然后再形成新的Spfile,另外如果当前实例还使用了其他一些功能参数,比如Oracle的OMF特性等,可以在Oracle的udump目录下的alter.log文件中找相应的更改日志,通过这些更改日可以手动恢复参数文件,并形成新的Spfile文件。
(3)、通过以上这些步骤之后,就可以shutdown数据库,然后重新启动即可。