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

Wesley13
• 阅读 649

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

--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 = '

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

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

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

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

更多

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

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

Oracle 角色、配置文件

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

Oracle 控制文件(CONTROLFILE)

Oracle 表空间与数据文件

$(document).ready(function(){dp.SyntaxHighlighter.HighlightAll('code');});
原文链接: http://blog.csdn.net/robinson_0612/article/details/5774795

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这