Oracle重做日誌和日誌挖掘

2022-04-28 16:03:12 字數 4284 閱讀 4133

1、oracle官網-managing the redo log

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

重做日誌檔案通常用於

當提交後,redo log buffer被刷入redo log files

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

column

datatype

description

group#

number

log group number

thread#

number

log thread number

sequence#

number

log sequence number

bytes

number

size of the log (in bytes)

blocksize

number

block size of the logfile (512 or 4096)

members

number

number of members in the log group

archived

varchar2(3)

archive status (yes) or (no)

status

varchar2(16)

unused,current,active,clearing,clearing_current,inactive

first_change#

number

lowest system change number (scn) in the log

first_time

date

time of the first scn in the log

next_change#

number

highest change number (scn) in the log. whenstatus=current,next_change#is set to the highest possible scn, 281474976710655.

next_time

date

time of the highest scn in the log. whenstatus=current,next_timeis set tonull.

con_id

number

0,1,n三種情況

日誌檔案的六種狀態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記錄包括

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

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

redo log總結

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

cnblogs-logminer配置使用手冊

用途目的

記得幫我點讚哦!

念念不忘,必有迴響,小夥伴們幫我點個贊吧,非常感謝。

我是職場亮哥,yy高階軟體工程師、四年工作經驗,拒絕鹹魚爭當龍頭的斜槓程式設計師。

聽我說,進步多,程式人生一把梭

oracle 重做日誌

5.日誌成員檔案的遷移 作用 資料 recovery恢復 特徵 sql select from v log sql select from v logfile sql select from v archived log 歸檔模式下檢視 thread 執行緒在單例項的環境下,thread 永遠是 1...

oracle 重做日誌檔案

1.查詢重做日誌檔案組的資訊 select group sequence members,status,archived from v log 2.查詢重做日誌檔案的資訊 select group type,member from v logfile order by group 3.為案例資料庫新...

Oracle 重做日誌歸檔

1 alter system switch logfile是強制日誌切換,不一定就歸檔當前的重做日誌檔案 若自動歸檔開啟,就歸檔當前的重做日誌,若自動歸檔沒有開啟,就不歸檔當前重做日誌。alter system archive log current是歸檔當前的重做日誌檔案,不管自動歸檔有沒有打都歸...