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

2014-11-24 17:47:08 · 作者: · 浏览: 5

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


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


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



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


SQL> startup


ORA-01078: failure in processing system parameters


ORA-27046: file size is not a multiple of logical block size


Additional information: 1



分析:


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


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


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


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


由于告警日志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下直接使用create spfile from pfile = '

' 来先创建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 Area251658240 bytes


Fixed Size1218796 bytes


Variable Size83887892 bytes


Database Buffers163577856 bytes


Redo Buffers2973696 bytes


ORA-00205: error in identifying control file, check alert log for more info



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


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


Thu Jul 29 16:52:44 2010


ALTER DATABASEMOUNT


Thu Jul 29 16:52:44 2010


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


ORA-27037: unable to obtain file status


Linux Error: 2: No such file or directory



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


SQL> show parameter control_



NAMETYPEVALUE


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


control_file_record_keep_timeinteger7


control_filesstring/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: No such file or directory



--修改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 Area251658240 bytes


Fixed Size1218796 bytes


Variable Size83887892 bytes


Database Buffers163577856 bytes


Redo Buffers2973696 bytes


Database mounted.


Database opened.



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


alert_orcl.logcore_5372init.orainitorcl.oraorapworcl


core_5360hc_orcl.datinitdw.oralkORCL



--pfile文件中创建spfile


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



File created.



--查看spfileorcl.ora已生成


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


alert_orcl.loghc_orcl.datinitorcl.oraspfileorcl.ora


core_5360init.oralkORCL


core_5372initdw.oraorapworcl



SQL> shutdown imme