物理結(jié)構(gòu)重做日志文件
時(shí)間:2023-02-09 01:57:01 | 來源:營(yíng)銷百科
時(shí)間:2023-02-09 01:57:01 來源:營(yíng)銷百科
物理結(jié)構(gòu)重做日志文件:重做日志文件記錄對(duì)數(shù)據(jù)庫的所有修改信息。它是三類文件中最復(fù)雜的一類文件,也是保證數(shù)據(jù)庫安全與數(shù)據(jù)庫備份與恢復(fù)有直接關(guān)系的文件。
日志文件組與日志成員
在每一個(gè)oracle數(shù)據(jù)庫中,至少有兩個(gè)重做日志文件組。每組有一個(gè)個(gè)或多個(gè)重做日志文件,即日志成員。同一組中的成員是鏡像關(guān)系,它們存儲(chǔ)的內(nèi)容是一模一樣的。oracle在寫日志時(shí),以一個(gè)日志組為邏輯單位寫入,只在將日志都寫入日志組中的每個(gè)成員文件中后,寫日志才完成。
日志工作原理
oracle有多個(gè)日志文件組,當(dāng)一個(gè)日志文件組中所有的成員所有的成員同時(shí)被寫滿數(shù)據(jù)時(shí),系統(tǒng)自動(dòng)轉(zhuǎn)換到下一個(gè)日志文件組,這個(gè)轉(zhuǎn)換過程稱為日志切換。
當(dāng)日志切換后,會(huì)給前一個(gè)日志組編一個(gè)號(hào),用于歸檔日志的編號(hào),這個(gè)編號(hào)稱為日志序列號(hào)。此編號(hào)由1開始,每切換一次,序列號(hào)自動(dòng)加1,最大值受參數(shù)MAXLOGHISTORY限制,該參數(shù)的最大值為65534。
當(dāng)oracle把最后一個(gè)日志組寫滿了以后,自動(dòng)轉(zhuǎn)向第一個(gè)日志組,這時(shí),再向第一個(gè)日志組寫日志的時(shí)候,如果數(shù)據(jù)庫運(yùn)行在非歸檔模式下,這個(gè)日志組中的原有日志信息就會(huì)被覆蓋。
使用以下語句查詢?nèi)罩疚募畔ⅲ?br>
sqlselect * from v
相關(guān)字段說明如下:
GROUP#:日志文件組號(hào)
THREAD#:日志文件線程號(hào),一般為1,雙機(jī)容時(shí)為2
SEQUENCE#:日志序列號(hào)
BYTES:日志文件大小
MEMBERS:該組的日志成員個(gè)數(shù)
ARC:該組日志信息是否已經(jīng)完成歸檔
STATUS:該組狀態(tài)(CURRENT:表示當(dāng)前正在使用的組;NACTIVE:表示非活動(dòng)組;ACTIVE:表示歸檔未完成)
FIRST_CHANGE#:系統(tǒng)改變號(hào)SCN,也叫檢查點(diǎn)號(hào)
FIRST_TIME:系統(tǒng)改變時(shí)間
DBA可以使用下列命令進(jìn)行強(qiáng)制日志切換
sqlalter system switch logfile
NOARCHIVELOG/ARCHIVELOG
NOARCHIVELOG是非歸檔模式,如果數(shù)據(jù)庫運(yùn)行在這種模式下,當(dāng)日志切換時(shí),新切換到的日志組中的日志信息會(huì)被覆蓋。ARCHIVELOG:歸檔模式,如果數(shù)據(jù)庫運(yùn)行在這種模式下,日志會(huì)被歸檔存儲(chǔ),產(chǎn)生歸檔日志,且在未歸檔之前,日志不允許被覆蓋寫入。
要確認(rèn)數(shù)據(jù)庫的歸檔方式,可以查詢數(shù)據(jù)字典v:
sqlselect log_mode from v
要了解歸檔日志的信息,可以查詢數(shù)據(jù)字典v
要將數(shù)據(jù)庫改為歸檔模式:
a.alter database archivelog
b.設(shè)置初始化參數(shù)LOG_ARCHIVE_START=TRUE
c.設(shè)置歸檔文件目標(biāo)存儲(chǔ)路徑 LOG_ARCHIVE_DEST=C:ORAARCHIVE
d.設(shè)置歸檔文件命名格式參數(shù) LOG_ARCHIVE_FORMAT='ORCK%T%S.ARC'。這個(gè)格式中的%S表示日志序列號(hào),自動(dòng)左邊補(bǔ)零;%s表示日志序列號(hào),自動(dòng)左邊不補(bǔ)零;%T表示日志線程號(hào),左邊補(bǔ)零;%t表示日志線程號(hào)不補(bǔ)零。
e.重新啟動(dòng)數(shù)據(jù)庫
CKPT進(jìn)程
CKPT進(jìn)程保證有修改過的數(shù)據(jù)庫緩沖區(qū)中的數(shù)據(jù)都被寫入到數(shù)據(jù)文件,日志文件、數(shù)據(jù)文件、數(shù)據(jù)庫頭和控制文件中都有寫入檢查點(diǎn)標(biāo)記。數(shù)據(jù)庫在恢復(fù)時(shí),只需提供自上一個(gè)檢查以來所做的修改。檢查點(diǎn)完成時(shí)系統(tǒng)將更新數(shù)據(jù)庫數(shù)據(jù)庫頭和控制文件。
參數(shù)LOG_CHECKPOINT_TIMEOUT決定一個(gè)檢查點(diǎn)發(fā)生的時(shí)間間隔。LOG_CHECKPOINT_INTERVAL決定一個(gè)檢查需要填充的日志文件塊的數(shù)量。檢查點(diǎn)號(hào),也稱系統(tǒng)改變號(hào)(SCN),它標(biāo)識(shí)一個(gè)檢查點(diǎn)??梢酝ㄟ^v
增加與刪除日志文件組、日志成員
(詳細(xì)語法請(qǐng)參考o(jì)racle文檔)
alter database [database] add logfile [group integer] filespec[,[group...
alter database [database] add logfile (...)
alter database [database] drop logfile [grout integer]
alter database [database] add logfile member 'filespec' [reuse] to group integer
alter database [database] drop logfile member 'filename','filename'...
alter database [database] rename file 'filename' to 'filename'
清除日志文件數(shù)據(jù)
alter database [database] clear [unarchived] logfile group integer|filespec
關(guān)鍵詞:日志,文件,結(jié)構(gòu),物理