Oracle聯機重做日誌檔案

2021-07-26 18:12:07 字數 3899 閱讀 7967

一、oracle中的幾類日誌檔案

redo log files —->聯機重做日誌

archive log files —->歸檔日誌

alert log files —->告警日誌

trace files —->跟蹤日誌

user_dump_dest —->使用者跟蹤日誌

backupground_dump_dest —->程序跟蹤日誌

二、聯機重做日誌的規劃管理

1.聯機重做日誌

記錄了資料的所有變化(dml,ddl或管理員對資料所做的結構性更改等)

提供了恢復機制(對以外刪除宕機利用日誌檔案實現資料恢復)

可以被分組管理

2.聯機重做日誌組

由乙個或多個相同的聯機日誌檔案組成乙個聯機重做日誌組

至少兩個日誌組,每組至少乙個成員

由lgwr後台程序同時將日誌內容寫入到乙個組的所有成員

ps:lgwr的觸發條件

在事務提交的時候

redo log buffer 三分之一滿

redo log buffer 多於1m的變化記錄

3.聯機重做日誌成員

重做日誌組內的每乙個聯機日誌檔案稱為乙個成員

乙個組內的每乙個成員具有相同的日誌序列號(log sequence number),且成員的大小相同

每次日誌切換時,oracle伺服器分配乙個新的lsn號給即將寫入日誌的日誌檔案組

lsn號用於唯一區分每乙個聯機日誌組和歸檔日誌

處於歸檔模式的聯機日誌,lsn號在歸檔時也被寫入到歸檔日誌之中

4.日誌檔案的工作方式

日誌檔案採用按順序迴圈寫的方式

當一組聯機日誌組寫滿,lgwr則將日誌寫入到下一組,當最後一組寫滿則從第一組開始寫入

寫入下一組的過程稱為日誌切換

切換時發生檢查點過程

5.聯機日誌檔案的規劃

分散放開,多路復用

日誌所在的磁碟應當具有較高的i/o

一般日誌組大小應滿足自動切換間隔至少15-20分鐘左右業務需求

建議使用rdo結尾的日誌檔名,避免誤刪日誌檔案。如redo01.rdo,redo02.rdo

6.日誌切換和檢查點切換

alter system switch logfile

7.新增日誌檔案組

alter database add logfile [group n]

('$oracle_base/oradata/orcl/redo01.rdo',

'$oracle_base/oradata/orcl/redo02.rdo')

size nm;

8.新增日誌成員

alter database add logfile member

'$oracle_base/oradata/orcl/redo01.rdo' to group 1,

'$oracle_base/oradata/orcl/redo02.rdo' to group 2;

9.刪除日誌成員

不能刪除組內的唯一乙個成員

不能刪除處於active 和current 狀態組內的成員

刪除處於active 和current 狀態組內的成員,應使用日誌切換使其處於inactive狀態後再刪除

對於組內如果乙個成員為null 值,乙個為invalid,且組處入inactive,僅能刪除invalid狀態成員

刪除日誌成員,物理檔案並沒有真正刪除,需要手動刪除

刪除日誌檔案後,控制檔案被更新

對於處於歸檔模式下的資料庫,刪除成員時確保日誌已被歸檔,檢視v$log檢視獲得歸檔資訊

alter database drop logfile member '$oracle_base/oradata/orcl/redo01.rdo'
11.日誌的重新命名

ho cp 'oldfile' 'newfile'
執行

alter database rename file 'oldfile' to 'newfile'
對於處於current狀態的需要改名且不切換的情況下

辦法是切換到mount狀態下再執行上述操作

12.清空日誌檔案組

alter database clear logifle group n

alter database clear unarchived logfile group n

13.日誌的監視

檢視日誌檢視中的物理日誌檔案是否存在、位置、大小等

select 'ho cp '||member from v$logfile;
檢視日誌檔案所處的磁碟空間是否足夠

sql> ho df -h
檢視組內是否存在多個成員,如為單一成員應考慮增加日誌成員

日誌切換的間隔時間,應滿足15-20分鐘業務需求,如果切換間隔很短,應當增加日誌檔案的大小

增加方法:先刪除日誌組,再重建該組(對於current和active的需要切換再做處理)

檢視切換時間間隔

select to_char(first_time,'yyyy-mm-dd hh24:mi:ss'),group# from v$log;
15.日誌的異常處理

不一致的情況(啟動時)

alter database clear logfile group n

alter database clear unarchived logfile group n

使用隱藏引數來解決(使用完記得刪除隱藏引數)

步驟:

alter system set "_allow_resetlogs_corruption" = true scope = spfile;

recover database using bakcup controlfile;

alter database open resetlogs;

shutdown immediate;

startup mount;

alter database open resetlogs;

alter system reset "_allow_resetlogs_corruption" scope = spfile sid = '*'

三、與日誌有關的動態效能檢視

v$log

v$logfile

v$log中status的狀態值

unused: 從未對該聯機日誌寫入任何內容,一般為新增加聯機日誌檔案或是使用resetlog後的狀態

current:當前重做日誌檔案,表示該重做日誌檔案為活動狀態,能夠被開啟和關閉

active:處於活動狀態,不屬於當前日誌,崩潰恢復需要該狀態,可用於塊恢復,可能歸檔,也可能未歸檔

clearing:表示在執行alter database clear logfile命令後正將該日誌重建為乙個空日誌,重建後狀態變為unused

clearing_current:當前日誌處於關閉執行緒的清除狀態。如日誌某些故障或寫入新日誌標頭時發生i/o錯誤

inactive:例項恢復不在需要聯機重做檔案日誌組,可能歸檔也可能未歸檔

v$logfile中status的狀態值

invalid :表明該檔案不可訪問

stale :表明檔案內容不完全

deleted : 表明該檔案不再使用

null :表明檔案正在使用

本人寫部落格主要為了對學習的知識點的鞏固,若文中有什麼不足的地方歡迎提出!

聯機重做日誌

兩點 1.利用重做日誌檔案,在資料庫發生故障時,可以重新處理事務。維護一致性 2.記錄資料所做的所有更改,提供恢復機制,可以劃分成組,至少需要兩個組,每個組至少乙個成員。規劃原則 分散放開到不同的磁碟,日誌所在盤io要足夠,io讀寫要快。分散到不同的磁碟的好處,解決io的衝突,解決因故障,日誌不可用...

聯機重做日誌檔案與歸檔日誌檔案

日誌檔案分為重做日誌檔案 redo log file 和歸檔日誌檔案 archive log file 重做日誌redo log file是lgwr程序從oracle例項中的redo log buffer寫入的,是迴圈利用的。就是說乙個redo log file group 寫滿後,才寫下乙個。當所...

聯機重做日誌組

用clear命令重建該日誌檔案 sql alter database clear logfile group1 如果是該日誌組還沒有歸檔,則需要用 sql alter database clear unarchived logfile group1 4 開啟資料庫,重新備份資料庫 sql alter...