SPFILE 错误导致数据库无法启动(ORA-01565)

--==========================================

--SPFILE错误导致数据库无法启动(ORA-01565)

--==========================================

 

SPFILE错误导致数据库无法启动

   SQL>startup

   ORA-01078:failureinprocessing system parameters

   ORA-01565:errorinidentifyingfile'/u01/app/oracle/10g/dbs/spfileorcl.ora'

   ORA-27046:filesizeisnota multipleoflogical blocksize

   Additional information:1

   

分析:

   从错误的提示来看,第一行说系统参数出错

   第二行详细指出了spfileorcl.ora出现了错误

   再看第三行,google了一下ORA-27046,原来是spfileorcl.ora文件被损坏,导致spfile文件不可读

   在spfile文件损坏的时候,如果尝试使用createpfilefromspfile,也将收到同样的错误

   由于告警日志alert_orcl.log之前被清空,故此时未能看到更详细的错误提示

 

解决办法:

   由于spfile为二进制文件,因此修复比较困难,所以考虑从备份的spfile中恢复

   1.spfile备份是否存在,如存在则恢复到原始位置,如放在缺省位置,则为$ORACLE_HOME/dbs,Windows平台为%ORACLE_HOME%/database

   2.spfile备份文件不存在,也可以从pfile启动,启动时指定pfile参数

   3.spfile备份文件不存在,pfile也不存在,则从告警日志alert_orcl.log中最后一次正常启动中使用strings命令提取相关参数来手动创

       建pfile,然后从pfile启动,启动时指定pfile参数。

       注意从告警日志中复制过来的内容有些需要加单引号,一是所有的路径需要使用单引号括起来,其次是和db_name,db_domain等等

   4.spfile备份文件不存在,pfile也不存在,也不愿从告警日志中手动创建pfile,则可以使用数据库初始化时的pfile来启动,缺省位置为

       $ORALCE_BASE/admin/$ORACLE_SID/pfile

   5.也可以在SQLplus下直接使用createspfilefrompfile='

'来先创建spfile文件,再启动Oracle

   6.注意

       从缺省的pfile或数据库初始化的pfile中来启动数据库后,有很多参数不一致,可能会导致一些功能不可用,需要调整

       建议定期备份参数文件

   7.更多有关参数文件的详细描述,请参阅:Oracle参数文件

 

解决示例

   --本示例直接数据库了初始化数据库时的pfile来启动数据库

   --启动后收到了有关控制文件的错误提示

   SQL>startup pfile='/u01/app/oracle/admin/orcl/pfile/init.ora.2292010214348'

   ORACLE instance started.

 

   Total System Global Area 251658240 bytes

   FixedSize                 1218796 bytes

   VariableSize             83887892 bytes

   DatabaseBuffers         163577856 bytes

   Redo Buffers               2973696 bytes

   ORA-00205:errorinidentifying controlfile,checkalertlogformore info

   

   --从告警日志中查看控制文件的信息,告警日志提示control03.ctl不存在

   SQL>ho tail-n 100/u01/app/oracle/admin/orcl/bdump/alert_orcl.log

   Thu Jul 29 16:52:44 2010

   ALTERDATABASE  MOUNT

   Thu Jul 29 16:52:44 2010

   ORA-00202:controlfile:'/u01/app/oracle/oradata/orcl/control03.ctl'

   ORA-27037:unabletoobtainfilestatus

   Linux Error:2:Nosuchfileordirectory

 

   --查看控制文件相关的参数信息中定义了control03.ctl

   SQL>show parameter control_

 

   NAME                                TYPE       VALUE

   ------------------------------------ ----------- ------------------------------

   control_file_record_keep_time       integer    7

   control_files                       string     /u01/app/oracle/oradata/orcl/c

                                                    ontrol01.ctl,/u01/app/oracle/

                                                    oradata/orcl/control02.ctl,/u

                                                    01/app/oracle/oradata/orcl/con

                                                    trol03.ctl

 

   SQL>ho ls/u01/app/oracle/oradata/orcl/control03.ctl  --查看control03.ctl物理文件不存在

   ls:/u01/app/oracle/oradata/orcl/control03.ctl:Nosuchfileordirectory

                                                    

   --修改pfile文件

   SQL>ho vim/u01/app/oracle/admin/orcl/pfile/init.ora.2292010214348

 

      --删除这段,/u01/app/oracle/oradata/orcl/control03.ctl  内容

 

   --从修改后的pfile文件启动

   SQL>startup pfile='/u01/app/oracle/admin/orcl/pfile/init.ora.2292010214348'

   Total System Global Area 251658240 bytes

   FixedSize                 1218796 bytes

   VariableSize             83887892 bytes

   DatabaseBuffers         163577856 bytes

   Redo Buffers               2973696 bytes

   Databasemounted.

   Databaseopened.

 

   SQL>ho ls/u01/app/oracle/10g/dbs/

   alert_orcl.log core_5372   init.ora   initorcl.ora orapworcl

   core_5360      hc_orcl.dat initdw.ora lkORCL       

 

   --从pfile文件中创建spfile

   SQL>createspfilefrompfile='/u01/app/oracle/admin/orcl/pfile/init.ora.2292010214348';

 

   Filecreated.

 

   --查看spfileorcl.ora已生成

   SQL>ho ls/u01/app/oracle/10g/dbs/

   alert_orcl.log hc_orcl.dat initorcl.ora spfileorcl.ora

   core_5360      init.ora    lkORCL      

   core_5372      initdw.ora  orapworcl

 

   SQL>shutdownimmediate;

   Databaseclosed.

   Databasedismounted.

   ORACLE instance shut down.

 

   SQL>startup  --从spfile启动

   ORACLE instance started.

 

   Total System Global Area 251658240 bytes

   FixedSize                 1218796 bytes

   VariableSize             83887892 bytes

   DatabaseBuffers         163577856 bytes

   Redo Buffers               2973696 bytes

   Databasemounted.

   Databaseopened.

 

   实际上可以先createspfilefrompfile='

',再从spfile启动,使用altersystem修改相关的参数比直接修改pfile似乎

   更简单些,比如上面的例子中需要去掉一个控制文件。当然此类问题是仁者见仁,智者见者。

   总之一条,定期备份参数文件是相当有必要的!

你可能感兴趣的:(DATABASE)