drop redo logfile current报错

目的:在安装完毕11.2.0.4版本Oracle单实例数据库后,对日志进行格式化,删除原日志组current状态,删除报错

#对于理论学习,而带来的理解命令,因此作为记录

#查询日志状态
SYS > select GROUP#,MEMBERS,STATUS from v$log;

GROUP#    MEMBERS STATUS
------ ---------- ----------------

     1          2 CURRENT
     2          2 ACTIVE
     3          2 ACTIVE

#查询日志组成员信息

SYS >  select group#,member from v$Logfile where type='ONLINE'

GROUP# MEMBER
------ ------------------------------------------------------
     1 /u01/app/oracle/oradata/ENMO/redo01a.log
     1 /u01/app/oracle/oradata/ENMO/redo01b.log
     3 /u01/app/oracle/oradata/ENMO/redo03a.log
     3 /u01/app/oracle/oradata/ENMO/redo03b.log
     2 /u01/app/oracle/oradata/ENMO/redo02a.log
     2 /u01/app/oracle/oradata/ENMO/redo02b.log

6 rows selected.

#删除 ACTIVE状态日志组,某个成员,可以成功

SYS > alter database drop logfile member '/u01/app/oracle/oradata/ENMO/redo02a.log' ;

Database altered.

#删除ACTIVE状态日志组,整个组删除,失败,提示介质恢复需要使用,无法删除

alter database drop logfile group 2
*
ERROR at line 1:
ORA-01624: log 2 needed for crash recovery of instance ENMO (thread 1)
ORA-00312: online log 2 thread 1: '/u01/app/oracle/oradata/ENMO/redo02b.log'

#如下操作可以改变日志组状态

SYS > alter system checkpoint;

System altered.

SYS > select GROUP#,MEMBERS,STATUS from v$log;

GROUP#    MEMBERS STATUS
------ ---------- ----------------
     1          2 CURRENT
     2          1 INACTIVE
     3          2 INACTIVE

#可以删除

SYS > alter database drop logfile group 2;

Database altered.

#理论学习: CURRENT 代表日志组为当前日志组,log_buffer 经过lgwr进程写入此状态的日志组成员中

                     ACTIVE     在线日志组,代表实例恢复需要使用此日志组,在此日志组记录的日志中,存在脏块数据,也就是数据块的改变信息记录通过lgwr写入了redo logfile,但是被改变的数据块,并未经过dbwr 写入 datafile文件中,因此实例恢复时,需要前滚应用redo logfile 将数据库块的改变信息,重新构建内存数据块。

                     INACTIVE  离线日志组,代表此日志组中,记录的脏块数据,对应的缓存脏块数据,也已经都被DBWR写入了datafile文件中

 #而 alter system checkpoint;命令为 触发CKPT进程,  进程会触发DBWR写脏块,因此能快速将日志组状态,从active 修改为 inactive状态。  当然,如果有耐心,可以等待dbwr进程自动写脏块,日志组状态也能从active转变为inactive状态

猜你喜欢

转载自www.cnblogs.com/lvcha001/p/9180514.html