暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORA-313 ORA-312 ORA-27041 ORA-314|重建控制文件

DBA小白成长记 2019-04-19
2004

警告:当数据库在有业务进行时,不到万不得已不能通过kill pmon进程的方式关闭数据库


这是一个乌龙的开始:

接下来就有了数据库起不来的问题。。。


以上对话问题在哪呢?不说别人,就说我:

(1)在他说oracle连不上的时候我没有问他是怎么连接的(结果问题就在这,他输入的是conn as sysdba)

(2)我没有问他他之前有没有做什么操作,除了建表空间

(3)一听他讲是测试库,想起之前学到的可以通过直接杀pmon进程的方式关闭实例,就给他直接用了,没有考虑到这种方式的适用场景


好了,原因分析完,看看现在数据库在启动的时候报什么错:

1、ORA-00313 ORA-00312

一看313和312的报错有点虚,这是个测试库,肯定没有备份,也没有开归档,难道要通过隐含参数启动,冒着重建数据库的风险?

后来再看到ora-27041,没有权限打开redo02,cd到相关目录发现redo日志的所属用户和组都变为了root,赶紧将其改为oracle:oinstall,然后关闭数据库,再次尝试startup


2、ORA-00314 ORA-00312

从以上报错看,是说数据库在启动的时候需要的sequence是3371和redo02里3107不匹配,再结合之前的报错,应该是redo02损坏

因为是测试库,没有备份没有归档,而且现在的需求就是数据库可以正常打开就好,所以在这里使用了重建控制文件的做法


3、备份控制文件并关闭数据库


4、物理层面再将之前的控制文件备份下,避免出现更大的问题没办法回退


5、将数据库启动到nomount的阶段,执行重建控制文件的脚本,完了后恢复并打开数据库

(这个可以在之前备份的a.ctl文件里找到)

vi control.sql  

这段直接从控制文件备份里拷出来直接用

CREATE CONTROLFILE REUSE DATABASE "CXYWDB" NORESETLOGS FORCE LOGGING ARCHIVELOG MAXLOGFILES 16

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 8

MAXLOGHISTORY 292

LOGFILE

GROUP 5 '/oradata2/cxywdb/redo11.log' SIZE 50M,

GROUP 6 '/oradata2/cxywdb/redo12.log' SIZE 50M,

GROUP 7 '/oradata2/cxywdb/redo13.log' SIZE 50M

-- STANDBY LOGFILE

DATAFILE

'/oradata/cxywdb/system01.dbf',

'/oradata/cxywdb/undotbs01.dbf',

'/oradata/cxywdb/sysaux01.dbf',

'/oradata/cxywdb/users01.dbf',

'/oradata/cxywdb/alfred01.dbf',

'/oradata/cxywdb/alfred02.dbf',

'/oradata/cxywdb/alfred03.dbf',

'/oradata/cxywdb/alfred04.dbf',

'/oradata/cxywdb/alfred05.dbf',

'/oradata/cxywdb/dbs_i_alfred01.dbf'

CHARACTER SET ZHS16GBK ;



本文分享自微信公众号 - DBA小白成长记,如有侵权,请联系 service001@enmotech.com 删除。
最后修改时间:2019-12-18 15:42:44
文章转载自DBA小白成长记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论