开发者社区> leshami> 正文

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

简介: --========================================== --SPFILE 错误导致数据库无法启动(ORA-01565) --========================================== ...
+关注继续查看

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

--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 表空间与数据文件

 

                   

 

               

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【ORACLE】relink oracle 10g 数据库
通常要迁移一个数据库,我们会使用 1 冷备份,整个数据库迁移, 2 rman duplicate 功能进行复制到本机或者复制到异机, 前面两种都必须先在目标库上安装软件。
686 0
你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧
原文:你所不知道的SQL Server数据库启动过程,以及启动不起来的各种问题的分析及解决技巧 目前SQL Server数据库作为微软一款优秀的RDBMS,其本身启动的时候是很少出问题的,我们在平时用的时候,很少关注起启动过程,或者很少了解其底层运行过程,大部分的过程只关注其内部的表、存储过程、视图、函数等一系列应用方式,而当有一天它运行的正常的时候突然启动不起来了,这时候就束手无策了,能做的或许只能是重装、配置、还原等,但这一个过程其实是一个非常耗时的过程,尤其当我们面对是庞大的生产库的时候,可能在这火烧眉毛的时刻,是不允许你再重搭建一套环境的。
1490 0
【我的Android进阶之旅】Android目录过长造成错误:Failed to crunch file abc_textfield_search_activated_mtrl_alpha.9.png
一、编译异常描述 一大早来开发一个新的需求,拉取了一个新的分支,然后导入Android Studio之后,编译就报错了,报错如下所示: 错误具体日志如下所示: Information:Gradle tasks [:app:assembleDebug]...
1470 0
MSSQL SERVER 2008 R2 无法连接到数据库,用户sa登录失败,错误:18456
原因:勾选了强制实施密码策略,但是设置的密码很简单依然可以,比如:123456 这是为什么?原来,这个功能要用到NetValidatePasswordPolicy() API这个函数。 (该功能只有在安全要求较高的时候才用) 解决方法:在运行里输入 gpedit.msc 打开 “本地策略”编辑器依次 展开“计算机配置” “Windows设置”-“安全设置”-“帐户策略”-“密码策略",“密码必须符合复杂性要求”应该是禁用状态, 改为已启用,之后再创建SQL Server用户即可。
1524 0
[20121214]数据库错误记录.txt
[20121214]数据库错误记录.txt--自己参照许多文档,写了一个检测数据库错误的例子:--以sys用户登录,建立表CREATE TABLE SYS.ERROR_LOG(  IP_ADDRESS       VARCHAR2(30 BYTE),  USER...
650 0
.Net FrameWork 4.0中使用EF向数据库插入数据报datatime2类型错误的解决办法
最近用.Net 4.0创建EF的持久层,老是在插入新数据时,报datatime2类型错误。 找了很多资料,都没有得到解决,后来我询问了我的一个同事,Tom 给我解决了这个问题。   由于EF4默认把C#的DateTime类型转换成Sql server2008的datatime2类型,所以2005的数据库不支持,最终导致程序报错。
682 0
+关注
leshami
传播知识,分享快乐!十年以上数据库,系统运维与管理,性能优化经验。全部文章,欢迎扩散,转载请注明出处!
639
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载