①在數(shù)據(jù)庫(kù)打開(kāi)并運(yùn)行之后,控制文件中的系統(tǒng)檢查點(diǎn)scn、控制文件中的數(shù)據(jù)文件檢查點(diǎn)scn和每個(gè)數(shù)據(jù)文件頭中的啟動(dòng)scn都是相同的
②控制文件中的每個(gè)數(shù)據(jù)文件的終止scn都為null
③NORMAL或IMMEDIATE 關(guān)閉數(shù)據(jù)庫(kù)的過(guò)程中,系統(tǒng)會(huì)執(zhí)行一個(gè)檢查點(diǎn)動(dòng)作,這時(shí)所有數(shù)據(jù)文件的終止scn 都會(huì)設(shè)置成數(shù)據(jù)文件頭中的那個(gè)啟動(dòng)scn的值。
④在數(shù)據(jù)庫(kù)重新啟動(dòng)的時(shí),Oracle將執(zhí)行兩次檢查 ◆ 看數(shù)據(jù)文件頭中的ckpt計(jì)數(shù)器是否與對(duì)應(yīng)控制文件中的ckpt計(jì)數(shù)器一致。若相等,進(jìn)行第二次檢查 ◆ 比較文件頭中的啟動(dòng)scn和對(duì)應(yīng)控制文件中的終止scn進(jìn)行比較,如果終止scn等于啟動(dòng)scn,則不需要對(duì)那個(gè)文件進(jìn)行恢復(fù)
⑤數(shù)據(jù)庫(kù)打開(kāi)之后,存儲(chǔ)在控制文件中的數(shù)據(jù)文件終止scn的值再次被更改為null,這表示數(shù)據(jù)文件已經(jīng)打開(kāi)并能夠正常使用了
注:當(dāng)ABORT強(qiáng)制關(guān)閉數(shù)據(jù)庫(kù)時(shí)不進(jìn)行檢查點(diǎn)處理,所以終止scn仍然為無(wú)窮大。在下次啟動(dòng)期間,發(fā)現(xiàn)啟動(dòng)scn和終止scn不同,需要進(jìn)行線程恢復(fù)。
3、SCN的增加
①SCN(System Change Number)只要數(shù)據(jù)庫(kù)被修改,就會(huì)+1,而不是一定要進(jìn)行checkpoint,例如DML的發(fā)生即使沒(méi)有提交也會(huì)使SCN+1
注:SCN增加并不代表會(huì)在數(shù)據(jù)文件頭中表現(xiàn)出來(lái),而是需要等到checkpoint執(zhí)行后才寫(xiě)入(當(dāng)然可能已經(jīng)增加了很多)
②如果一個(gè)DML導(dǎo)致產(chǎn)生事務(wù),則會(huì)產(chǎn)生一個(gè)SCN。這個(gè)意思是說(shuō)如果一個(gè)事務(wù)包含多個(gè)dml,則只有第一個(gè)初始產(chǎn)生事務(wù)的dml產(chǎn)生scn,提交的時(shí)候又是一個(gè)scn,如果一個(gè)事務(wù)只有一個(gè)dml,拿看起來(lái)就是dml產(chǎn)生一個(gè)scn,提交或者回滾產(chǎn)生一個(gè)scn。
③Oracle 10g內(nèi)部的SCN會(huì)默認(rèn)不管有沒(méi)有動(dòng)作,每隔3s自動(dòng)增加一次。其他需要增加的情況則再加。
④只有ckpt進(jìn)程才會(huì)修改文件頭中的checkpoint計(jì)數(shù)器和SCN,DBWR只會(huì)修改數(shù)據(jù)塊,即ckpt通知dbwr寫(xiě)數(shù)據(jù)文件,寫(xiě)完之后ckpt更新控制文件和數(shù)據(jù)文件頭。此時(shí)若DBWR發(fā)現(xiàn)數(shù)據(jù)塊的log block還沒(méi)有被寫(xiě)入日志文件,則在dbwr寫(xiě)塊之前通知llgwr把log buffer中的日志寫(xiě)入log文件。
注:總結(jié)一下,日志切換必定出發(fā)ckpt,但ckpt不一定會(huì)出發(fā)llgwr,但是一定會(huì)觸發(fā)dbwr4、其他的SCN
①日志文件頭中包含了Low scn、Next scn,表示給日志文件包含有從Low scn到Next scn的redo record
注:當(dāng)系統(tǒng)運(yùn)行時(shí),日志文件的Next scn同樣為無(wú)窮大。而且需要注意:在恢復(fù)時(shí)不是用日志文件中的Low scn和Next scn來(lái)選擇恢復(fù)的日志文件,而是通過(guò)數(shù)據(jù)文件頭中的信息。
②數(shù)據(jù)塊中的SCN data block里面的SCN是當(dāng)block被更改的時(shí)候的SCN,而數(shù)據(jù)文件有那么多 block,自然不同的block有不同的SCN,block中存在block SCN和ITL中的commit SCN。block SCN 又在塊頭和塊位都有,若不一致意味著block損壞。而ITL中的commit SCN則跟consistent gets and delay block cleanout有關(guān)。
③v$database中的checkpoint_change# 和 dbms_flashback.get_system_change_number 不同。前者是作為數(shù)據(jù)庫(kù)的最后一次checkpoint是的SCN,而后者是系統(tǒng)的最新SCN,所以一般后者都會(huì)比前者大,而當(dāng)剛做完checkpoint時(shí)兩者會(huì)差不多。
④當(dāng)begin backup命令發(fā)出后,相關(guān)數(shù)據(jù)文件的checkpoint scn被凍結(jié)(以及狀態(tài)標(biāo)志被改變),其他一切照舊。例如:日志切換時(shí)checkpoint count正常遞增/檢查點(diǎn)照常寫(xiě)文件,自然文件中的數(shù)據(jù)塊內(nèi)的各種scn也照常遞增。
不登高山,怎知天高;不臨深溪,焉知地厚!站在堅(jiān)實(shí)的土地上,做著生命中最真實(shí)的事情;像一棵挺拔的大樹(shù),認(rèn)可自己的命運(yùn)并敢于迎接屬于這一方天空的風(fēng)風(fēng)雨雨。
當(dāng)前文章:SCN的工作機(jī)制-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:
http://weahome.cn/article/dejpsc.html