警告:当数据库在有业务进行时,不到万不得已不能通过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 删除。




