CURRENT:指的是當前的記錄檔,該記錄檔是活動的,當前正在被使用的,在進行崩潰恢複時,Current的記錄檔時必須的。
ACTIVE:活動的非當前日誌,該日誌可能已經完成歸檔也可能沒有歸檔,活動的記錄檔在Crash恢複時會被用到。
ACITVE狀態意味著檢查點尚未完成,如果記錄檔迴圈使用再次到達該檔案,資料庫將處於等待的停頓狀態,此時在alert檔案中,可以看到類似如下記錄:Checkpoint not complete。當這種問題出現時,可以從資料庫內部通過v$session_wait來觀察,該視圖會顯示資料庫當前哪些session正處於這種等待。Checkpoint not complete在資料庫中體現為等待事件log file switch(checkpoint incomplete):
SQL> select sid,event,state from v$session_wait;---查詢結果中event的值為:log file switch
在此同時,可能DBWR進程進行中db file parallel write,記錄檔必須等待DBWR完成檢查點觸發的寫操作之後才能被覆蓋。如果設定了參數log_checkpoints_to_alert為TRUE的話,還可以在alert檔案中清晰地看到檢查點的增進和完成情況。
引起Checkpoint Incomplete可能有以下多種原因:
記錄檔過小,切換過於頻繁;
日誌組太少,不能滿足正常業務量的需要;
記錄檔所在磁碟I/O存在瓶頸,導致寫出緩慢,阻塞資料庫正常運行;
由於資料檔案磁碟I/O瓶頸,DBWR寫出過於緩慢;
由於事務量巨大,DBWR負載過高,不堪重負。
解決方案:
適當增加記錄檔大小;
適當增加日誌組數;
使用更快的磁碟儲存記錄檔(如採用更高轉速磁碟;使用RAID10而不是RAID5等方式);
改善磁碟I/O的效能;
使用多個DBWR進程或使用非同步I/O等。
注意:Checkpoint Incomplete是一類嚴重的等待,它意味著資料庫不能再產生日誌,所有資料庫修改操作將全部掛起。
INACTIVE:非活動紀錄,該日誌在執行個體恢複時不再需要,但是在介質恢複時可能會用到。INACTIVE狀態的日誌也可能沒有被歸檔。如果資料庫啟動在歸檔模式,在未完成歸檔之前,記錄檔也不允許被覆蓋,這時候活動進程會處於log file switch(archiving needed)等待之中。日誌是否完成歸檔,可以根據v$log視圖的archived欄位進行判斷。
UNUSED:是指該日誌從未被寫入,這類日誌可能是剛被添加到資料庫或者在RESETLOGS之後被重設。被使用之後,該狀態會被改變。