轉載:http://www.eygle.com/archives/2008/05/oracle_logfile.html
Logfile的不同狀態
一、 V$LOG:STATUS 指的是GROUP的狀態
UNUSED:
尚未記錄change的空白group(一般會出現在,loggroup剛剛被添加,或者剛剛使用了resetlogs打開數據庫,或者使用clear logfile後)
CURRENT:
當前正在被LGWR使用的group(同時是ACTIVE狀態)
ACTIVE:
未被LGWR寫,instance recovery需要的。還沒有完成checkpoint。
INACTIVE:
online,未被LGWR寫,對instance recovery不再有用了。
CLEARING:
正在被clear的group(Log is being re-created as an empty log after an ALTER DATABASE CLEAR LOGFILE statement. After the log is cleared, the status changes to UNUSED.)
CLEARING_CURRENT:
一個正在被clear的CURRENT group(Current log is being cleared of a closed thread. The log can stay in this status if there is some failure in the switch such as an I/O error writing the new log header.)出現在中狀態一般是有錯誤的。
二、V$LOGFILE:STATUS指的是member的狀態
INVALID:
不能使用的member,可能損壞了(另外,剛加入到redolog group的日誌文件在被使用之前也是這個狀態)
STALE:
見下面解釋
DELETED:
被alter database drop logfile member的member
BLANK:
正常的都是blank,不管是否被寫。
下面是對metalink上對stale的解釋:
Log files may have a status of stale regardless of redo log mirroring or
archival mode.
Solution Description:
=====================
In general, the stale status of a redo log member should not be a cause for
great concern, unless you observe that this happens frequently or
systematically. Keep in mind that a stale log is not necessarily an invalid
log, but more of an "in-doubt" one. Once the corresponding redo group becomes
the current one again, the stale status will go away by itself.
下面是一個例子:
logfile中有兩個file爲stale狀態,當發生日誌切換時,group1變成current狀態,從而,group1下的logfile變成
blank(正常狀態)
另外,這個例子也展示了logfile group從active到inactive的變化。
當發生switch logfile前,group5爲current狀態,switch logfile後,group5變爲active狀態,這說明recovery時
group5是有用的,同時也說明logfile時發生的不是完全檢查點。
當手工發生檢查點後,group5從active變爲了inactive狀態,此時,group5對recovery不再有用。這說明:
alter system checkpoint發生的是完全檢查點。
SQL> l
1* select * from v$logfile
SQL> /
GROUP# STATUS TYPE MEMBER
---------- ------- ------- ----------------------------------------
1 STALE ONLINE /opt/oracle/oradata/userlog2/redo01.log
2 STALE ONLINE /opt/oracle/oradata/userlog2/redo02.log
3 ONLINE /opt/oracle/oradata/userlog2/redo03.log
4 ONLINE /opt/oracle/oradata/userlog2/redo04.log
5 ONLINE /opt/oracle/oradata/userlog2/redo05.log
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
1 1 21 20971520 1 NO INACTIVE 704228 07-AUG-06
2 1 22 20971520 1 NO INACTIVE 753376 07-AUG-06
3 1 23 20971520 1 NO INACTIVE 785843 07-AUG-06
4 1 24 20971520 1 NO INACTIVE 868923 08-AUG-06
5 1 25 20971520 1 NO CURRENT 951980 10-AUG-06
SQL> alter system switch logfile;
System altered.
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER
---------- ------- ------- ----------------------------------------
1 ONLINE /opt/oracle/oradata/userlog2/redo01.log
2 STALE ONLINE /opt/oracle/oradata/userlog2/redo02.log
3 ONLINE /opt/oracle/oradata/userlog2/redo03.log
4 ONLINE /opt/oracle/oradata/userlog2/redo04.log
5 ONLINE /opt/oracle/oradata/userlog2/redo05.log
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
1 1 26 20971520 1 NO CURRENT 994126 10-AUG-06
2 1 22 20971520 1 NO INACTIVE 753376 07-AUG-06
3 1 23 20971520 1 NO INACTIVE 785843 07-AUG-06
4 1 24 20971520 1 NO INACTIVE 868923 08-AUG-06
5 1 25 20971520 1 NO ACTIVE 951980 10-AUG-06
SQL>
SQL> alter system checkpoint;
System altered.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
1 1 26 20971520 1 NO CURRENT 994126 10-AUG-06
2 1 22 20971520 1 NO INACTIVE 753376 07-AUG-06
3 1 23 20971520 1 NO INACTIVE 785843 07-AUG-06
4 1 24 20971520 1 NO INACTIVE 868923 08-AUG-06
5 1 25 20971520 1 NO INACTIVE 951980 10-AUG-06