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

系统 1624 0

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

--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 似乎

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

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

 

更多

 

Oracle 实例和Oracle 数据库(Oracle 体系结构)

 

Oracle 用户、对象权限、系统权限

 

Oracle 角色、配置文件

 

  Oracle 联机重做日志文件(ONLINE LOG FILE)

 

  Oracle 控制文件(CONTROLFILE)

 

  Oracle 表空间与数据文件

 

                   

 

               

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论