您的位置:首页 > 数据库

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

2012-07-20 13:05 381 查看
--==========================================
--SPFILE
错误导致数据库无法启动(ORA-01565)
--==========================================
 
SPFILE错误导致数据库无法启动
   
SQL> startup
   
ORA-01078: failure
in processing system parameters
   
ORA-01565: error
in identifying file
'/u01/app/oracle/10g/dbs/spfileorcl.ora'
   
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 =
'<dir>' 来先创建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
   
Fixed Size                 
1218796 bytes
   
Variable Size             
83887892 bytes
   
Database Buffers         
163577856 bytes
   
Redo Buffers                2973696 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 DATABASE  
MOUNT
   
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_
 
   
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:
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 Area  251658240 bytes
   
Fixed Size                 
1218796 bytes
   
Variable Size             
83887892 bytes
   
Database Buffers         
163577856 bytes
   
Redo Buffers                2973696 bytes
   
Database mounted.
   
Database opened.
 
   
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> 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.log 
hc_orcl.dat  initorcl.ora 
spfileorcl.ora
   
core_5360       init.ora    
lkORCL      
   
core_5372       initdw.ora  
orapworcl
 
   
SQL> shutdown immediate;
   
Database closed.
   
Database dismounted.
   
ORACLE instance shut down.
 
   
SQL> startup   --从spfile
启动
   
ORACLE instance started.
 
   
Total System Global Area  251658240 bytes
   
Fixed Size                 
1218796 bytes
   
Variable Size             
83887892 bytes
   
Database Buffers         
163577856 bytes
   
Redo Buffers                2973696 bytes
   
Database mounted.
   
Database opened.
 
   
实际上可以先create spfile
from pfile =
'<dir>', 再从spfile启动,使用alter system
修改相关的参数比直接修改pfile似乎
   
更简单些,比如上面的例子中需要去掉一个控制文件。当然此类问题是仁者见仁,智者见者。
   
总之一条,定期备份参数文件是相当有必要的!
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息