自動清理歸檔日誌 Oracle重做日誌和日誌挖掘

2021-10-14 20:00:47 字數 2672 閱讀 4714

重做日誌包含所有資料產生的歷史改變記錄。

重做日誌檔案通常用於

v$log從控制檔案中顯示日誌檔案的資訊。可參考官網資料[v$log](

日誌檔案的六種狀態unused,current,active,clearing,clearing_current,inactive代表的意思分別如下所述:

上圖就是oracle lgwr程序向redo log files中寫入redo記錄的過程,可見,oracle資料庫每次只是用乙個redo log file來儲存redo log buffer中的redo記錄。lgwr正在寫入的那個redo log file就是current redo log file。

可用於例項恢復的redo log files就是active redo log files。

不再用於例項恢復的redo log files就是inactive redo log files。

如果資料庫當前是archivelog模式,那麼直到有乙個後台歸檔程序arcn已經歸檔成功,資料庫才能重用或者覆蓋active online log file。

如果資料庫當前是noarchivelog模式,當最後乙個redo log file寫滿的時候,lgwr會繼續按順序覆蓋下乙個inactive redo log file。

sql> select group#,status from v$log;    group# status---------- ----------------         1 current         2 inactive         3 inactive
有**可知當前所用的日誌檔案組數為3組,其中第一組是curren狀態,第二三組是inactive狀態。

我們也可以使用以下命令手動切換當前lgwr操作的redo log file。

sql> alter system switch logfile;系統已更改。sql> select group#,status from v$log;    group# status---------- ----------------         1 active         2 current         3 inactive
可見當前lgwr操作的redo log file已經由之前的第一組修改為第二組了,並且第一組的redo log file變成了active,也就是說可以用於例項恢復。

過了一會之後再次查詢redo log file狀態出現的結果如下:

sql> select group#,status from v$log;    group# status---------- ----------------         1 inactive         2 current         3 inactive
此時會發現後台程序會自動將第乙個處於active的redo log file變成inactive。這是為什麼呢?原來是後台歸檔程序arcn將active redo log file歸檔成歸檔日誌檔案,相應的狀態就由active變成了inactive。此時group1就不再用於例項恢復了。這個過程用下圖來解釋:

oracle資料庫允許多路復用重做日誌,也就是說,重做日誌的兩個或多個相同的拷貝可以自動保持在不同的地點。為了最大效益,儲存的位置應在分開的磁碟。即使重做日誌的所有副本都在同一磁碟上,這種冗餘措施也是可以防止i / o錯誤,檔案損壞,等等。當使用復用重做日誌時,lgwr會將相同的redo log資訊同時寫入多個相同的重做日誌檔案,從而解決重做日誌的單點故障問題。

圖中a_log1和b_log1是第1組的成員,a_log2和b_log2是第2組的兩個成員,等等。一組中的每個成員都必須是相同的大小,並且是狀態也是同步的(active or inactive)。

oracle中的scn(system change number)和我們的北京時間的意義是相同的,scn是oracle中的時間號

為什麼oracle不用時間來界定呢?

我在北京時間8:00的時候執行一條dml語句,然後修改機器上的時間為7:00,再執行一條dml語句。如果用機器上的時間區分的話,那oracle根本區分不出來這兩條dml語句的執行順序——而這一點對於oracle是很重要的。所以它採用自己產生的scn來區分所有操作的先後順序。

關於scn的具體講解可以參見:

日誌檔案使用作業系統塊大小

redo日誌組成

乙個redo record記錄包括

每個redo record包含每個原子改變的undo和redo

某些改動不需要undo(臨時表,直接載入...)

參考:oracle官網-using logminer to analyze redo log files

cnblogs-logminer配置使用手冊

用途 目的

Oracle自動清理歸檔日誌指令碼

本文 一 背景 由於業務增長,頻繁的備份還原對於磁碟空間有了更大的空間需求,基本每週500g的磁碟,空間使用率都會達到85 以上,故編寫oracle清理指令碼結合crond自動清理oracle歸檔日誌。二 工具介紹 rman recovery manager 是一種用於備份 backup 還原 re...

oracle歸檔日誌清理

rman清除方式會自動清除磁碟上的歸檔日誌檔案,同時會釋放控制檔案中對應的歸檔日誌的歸檔資訊。list expired archivelog all 列出所有失效的歸檔日誌 delete archivelog until sequence 16 刪除log sequence為16及16之前的所有歸檔...

mysql 清理歸檔日誌 oracle歸檔日誌清理

在開啟歸檔並沒有截斷日誌的情況下,歸檔日誌會越來越大,在此情況下,我們該如何去清理!兩種方法 1 配置rman自動管理archivelog。也可在rman中將資料備份到磁帶上,然後將過期的archivelog刪除 2 可以手工來處理,步驟如下 1 將 oracle下的相關archivelog日誌檔案...