目的:在安装完毕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状态