[Oracle OCP 052-1-6]非归档模式丢失CURRENT日志组怎么办

非归档模式,无备份的情况下,手误把CURRENT日志组给删了,导致数据库起不来
这种情况该如何处理?

先来模拟一下环境
1.mount状态下查看日志状态,由下可知,group1为current状态,其他group为unused状态

scott@ORCL>select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
         1          1          1   52428800        512          1 NO  CURRENT                1633158 02-JUL-19   2.8147E+14
         2          1          0   52428800        512          1 YES UNUSED                       0                      0
         3          1          0   52428800        512          1 YES UNUSED                       0                      0
         4          1          0    8388608        512          1 YES UNUSED                       0                      0

2.查看日志组所在路径

scott@ORCL>col member for a50
scott@ORCL>select * from v$logfile;

    GROUP# STATUS  TYPE    MEMBER                                             IS_
---------- ------- ------- -------------------------------------------------- ---
         1         ONLINE  /opt/oracle/oradata/orcl/redo01.log                NO
         3         ONLINE  /opt/oracle/oradata/orcl/redo03.log                NO
         2         ONLINE  /opt/oracle/oradata/orcl/redo02.log                NO
         4         ONLINE  /opt/oracle/oradata/orcl/redo04.log                NO

scott@ORCL>

3.将current日志删除

[oracle@db01 ~]$ rm -rf /opt/oracle/oradata/orcl/redo01.log

4.查看当前数据库状态
此时进行日志切换,暂时好像没有什么问题发生,但继续切换,当current又转回到group1时,死机
此时解决办法如下:

4.1 如果数据库模式是archived,因当前日志损坏无法归档,数据库可能挂起但没有崩溃,可以尝试在数据库打开状态下强制清除。

alter database clear unarchived logfile group n;

这步若能成功,一定要做数据库全备。因为当前日志已经坏掉,归档日志内容无法保持连续性。如需介质恢复,使用这样的归档日志前滚可能会有问题。

4.2 如果clear unarchived不能成功,则shutdown数据库,准备去做传统的基于日志的不完全恢复

SQL> recover database until cancel;
SQL> alter database open resetlogs;

4.3 如果严重到使用resetlogs也不能打开数据库,可以试试下面最后一招:
修改pfile文件,第一行添加_allow_resetlogs_corruption=TRUE
我就是用这招搞定的,下面来看具体步骤

4.3.1 此时状态是打开数据库报错

sys@ORCL>alter database open;

alter database open

*
ERROR at line 1:

ORA-03113: end-of-file on communication channel

Process ID: 31815

Session ID: 1 Serial number: 5

4.3.2 解决办法:设置_allow_resetlogs_corruption参数方式打开数据库:

  1. 创建参数文件,通过spfile生成pfile
    详情可参考:https://blog.csdn.net/weixin_42161670/article/details/93366375
sys@ORCL>create pfile from spfile;
File created.
  1. pfile文件添加参数如下
    _allow_resetlogs_corruption=TRUE
[root@db01 ~]# cd $ORACLE_HOME/dbs
[root@db01 dbs]# ll
total 28
-rw-rw----. 1 oracle oinstall 1544 Jul  2 23:36 hc_orcl.dat
-rw-r--r--. 1 oracle oinstall 2851 May 15  2009 init.ora
-rw-r--r--. 1 oracle oinstall  948 Jul  2 23:24 initorcl.ora
-rw-r-----. 1 oracle oinstall   24 May 18 17:15 lkORCL
-rw-r-----. 1 oracle oinstall 1536 May 19 11:40 orapworcl
-rw-r-----. 1 oracle oinstall 2560 Jun 29 09:33 spfileorcl.ora
-rw-r-----. 1 oracle oinstall 2560 Jun  2 13:40 spfileorcl.ora.bk
[root@db01 dbs]#
[root@db01 dbs]# vi initorcl.ora

在这里插入图片描述

  1. resetlog起库,之前需要执行recover动作
Using username "root".
Authenticating with public key "rsa-key-20190527"
Last login: Tue Jul  2 23:12:45 2019 from 192.168.1.106
[root@db01 ~]# su - oracle
Last login: Tue Jul  2 23:12:50 CST 2019 on pts/0
[oracle@db01 ~]$
[oracle@db01 ~]$
[oracle@db01 ~]$
[oracle@db01 ~]$ sqls

SQL*Plus: Release 11.2.0.1.0 Production on Tue Jul 2 23:31:53 2019

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

Connected to an idle instance.

idle>
idle>
idle>
idle>
idle>startup pfile=/opt/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora mount;
ORACLE instance started.

Total System Global Area  409194496 bytes
Fixed Size                  2213856 bytes
Variable Size             310380576 bytes
Database Buffers           92274688 bytes
Redo Buffers                4325376 bytes
Database mounted.
idle>
idle>
idle>
idle>
idle>alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:                         // 没recover所以报错
ORA-01139: RESETLOGS option only valid after an incomplete database recovery
idle>
idle>recover database until cancel;
Media recovery complete.
idle>
idle>alter database open resetlogs;

Database altered.

idle>
idle>
idle>conn scott/tiger;
Connected.
scott@ORCL>
scott@ORCL>

reference: https://www.cnblogs.com/beanbee/archive/2012/10/31/2748735.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值