日誌的狀態
可以通過v$log檢視來檢視日誌檔案的狀態:
sys@NEI> select group#,status,first_change# from v$log;
GROUP# STATUS FIRST_CHANGE#
---------- ---------------- -------------
1 CURRENT 59719840
2 INACTIVE 59719832
3 INACTIVE 59719835
最常見的日誌狀態有4種:
⑴ CURRENT指當前的日誌檔案,該日誌檔案是活動的,當前正在被使用的,在進行崩潰恢復時Current的日誌檔案是必須的。
⑵ ACTIVE日誌是活動的非當前日誌,該日誌可能已經完成歸檔也可能沒有歸檔,活動的日誌檔案在Crash恢復時會被用到。Active狀態意味著,檢查點尚未完成,如果日誌檔案迴圈使用再次到達該檔案,資料庫將處於等待的停頓狀態,此時在alter檔案中,可以看到類似如下記錄:
Thu Jun 18 05:34:42 2009
Thread 1 cannot allocate new log, sequence 4
Checkpoint not complete
Current log# 3 seq# 3 mem# 0: /home/oracle/app/oracle/oradata/ccdb/redo03.log
當這種問題出現時,可以從資料庫內部通過v$session_wait來觀察,該檢視會顯示資料庫當前哪些Sesssion正處於這種等待。Checkpoint not complete在資料庫中體現為等待事件log file switch(checkpoint incomplete):
select sid,event,state from v$session_wait;
同時要注意DBWR程式正在執行db file parallel write,日誌檔案必須等待DBWR完成檢查點觸發的寫操作之後才能被覆蓋。如果設定了引數log_checkpoints_to_alter為True的話,還可以在alert檔案中清晰地看到檢查點的增進和完成情況:
Wed Dec 16 17:15:54 2009
Beginning log switch checkpoint up to RBA [0x8f9.2.10], SCN: 59738301
Thread 1 advanced to log sequence 2297
Current log# 3 seq# 2297 mem# 0: /home/oracle/oradata/ccdb/redo03.log
Beginning log switch checkpoint up to RBA [0x8fa.2.10], SCN: 59738303
Thread 1 advanced to log sequence 2298
Current log# 1 seq# 2298 mem# 0: /home/oracle/oradata/ccdb/redo01.log
Thread 1 cannot allocate new log, sequence 2299
Checkpoint not complete
Current log# 1 seq# 2298 mem# 0: /home/oracle/oradata/ccdb/redo01.log
Wed Dec 16 17:15:55 2009
Completed checkpoint up to RBA [0x8fa.2.10], SCN: 59738303
Completed checkpoint up to RBA [0x8f9.2.10], SCN: 59738301
Wed Dec 16 17:15:59 2009
Beginning log switch checkpoint up to RBA [0x8fb.2.10], SCN: 59738307
Thread 1 advanced to log sequence 2299
Current log# 2 seq# 2299 mem# 0: /home/oracle/oradata/ccdb/redo02.log
Wed Dec 16 17:16:01 2009
Completed checkpoint up to RBA [0x8fb.2.10], SCN: 59738307
通過這些對比和觀察,可以使我們更好地瞭解Oracle的執行機制。
可以對這個問題做一下簡單的分析,Checkpoint incomplete有多種可能原因:
·日誌檔案過小,切換過於頻繁;
·日誌組太少,不能滿足正常事務量的需要;
·日誌檔案所在磁碟I/O存在瓶頸,導致寫出緩慢,阻塞資料庫正常執行;
·由於資料檔案磁碟I/O瓶頸,DBWR寫出過於緩慢;
·由於事務量巨大,DBWR負荷過高,不堪重負。
針對不同的原因,又可以從不同角度著手解決問題:
·適當增加日誌檔案大小;
·適當增加日誌組數;
·使用更快速磁碟儲存日誌檔案(如:採用更高轉速磁碟;使用RAID10而不是RAID5等方式);
·改善磁碟I/O效能;
·使用多個DBWR程式或使用非同步I/O等。
總之,只要我沒能夠發現資料庫的問題所在,就能夠從各個角度分析問題並尋找恰當的解決方法。需要強調的是,這是一類嚴重的等待,它意味著資料庫不能再產生日誌,所有資料庫修改操作將全部掛起。
⑶ INACTIVE是非活動日誌,該日誌在例項恢復時不再需要,但是在介質恢復時可能會用到。INACTIVE狀態的日誌也可能沒有被歸檔。如果資料庫啟動在歸檔模式,在未完成歸檔之前,日誌檔案也不允許被覆蓋,這時活動程式處於log file switch(archiving needed)等待之中。
日誌是否完成歸檔,可以根據V$LOG.ARCHIVED欄位進行判斷,以下案例日誌檔案ARCHIVED狀態為NO,也就是尚未歸檔:
sys@NEI> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /home/oracle/archivelog2
Oldest online log sequence 2297
Next log sequence to archive 2299
Current log sequence 2299
sys@NEI> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- ---------- ---------------- ------------- ---------------
1 1 2301 104857600 1 NO ACTIVE 59739139 16-DEC-09
2 1 2302 104857600 1 NO ACTIVE 59739143 16-DEC-09
3 1 2303 104857600 1 NO CURRENT 59739145 16-DEC-09
注意此時所有日誌組都沒有完成歸檔,所有DML事務都將掛起,使用者處於log file switch(archiving needed)等待:
select sid,event from v$sesssion_wait;
這種情況需要DBA介入進行緊急處理,否則普通使用者將無法連線:
sys@NEI> conn dbtan/dbtan
ERROR:
ORA-00257: archiver error. Connect internal only, until freed.
這種情況通常是由資料庫異常引起的,可能是因為I/O緩慢,也可能是因為事務量過大,在特殊情況下,有可能是因為日誌損壞。對於本案例就屬於前者,是由作者人為“瘋狂”switch logfile 所至。
⑷ UNUSED 表示該日誌從未被寫入,這類日誌可能是剛被新增到資料庫或者在RESETLOGS之後被重置。被使用之後,該狀態會被改變。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8183550/viewspace-659577/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux中如何檢視日誌命令中的響應狀態?Linux
- Vben Admin 原始碼學習:狀態管理-錯誤日誌原始碼
- 新增橋接連線狀態監控、重構日誌系統橋接
- 【Logback日誌級別】動態調整Logback的日誌級別
- oracle關閉狀態刪除活動日誌報錯恢復(一)Oracle
- Linux動態列印kernel日誌Linux
- Haytham個人部落格開發日誌 -- Flask+Vue基於token的登入狀態與路由管理FlaskVue路由
- 日誌分析-apache日誌分析Apache
- [Java/日誌] 日誌框架列印應用程式日誌程式碼的執行情況Java框架
- [日誌分析篇]-利用ELK分析jumpserver日誌-日誌拆分篇Server
- 【VMware VCF】使用 SoS 實用程式檢查 VCF 環境的執行狀態以及收集相關元件的日誌資訊。元件
- 日誌
- JVM的GC日誌JVMGC
- 程式中的日誌
- MySQL 的日誌:binlogMySql
- 【VMware VCF】使用 SoS 實用程式檢查 VCF 環境的執行狀態以及收集相關元件的日誌資訊。Av元件
- Mysql5.7 的錯誤日誌中最常見的note日誌MySql
- 淺談前端的狀態管理,以及anguar的狀態管理庫前端
- Java日誌:您需要了解的4種日誌型別Java型別
- ⚠️Flutter的 狀態管理⚠️Flutter
- DeFi:Meme的狀態
- React的狀態管理React
- 【Spring】日誌列印sql,日誌配置列印sqlSpringSQL
- 前端狀態管理與有限狀態機前端
- MySQL的日誌總結MySql
- Elasticsearch 的事務日誌Elasticsearch
- loki的日誌查詢Loki
- mysql 鎖的慢日誌MySql
- Java的標準日誌Java
- python logging日誌的禁用Python
- Apach的配置和日誌
- CMS日誌
- 日誌配置
- mybatis日誌MyBatis
- Weblogic日誌Web
- ros 日誌ROS
- Log日誌
- 日誌列印
- Loggiing日誌