在普通的recover database 或者 recover tablespace, recover datafile時(shí),Oracle會(huì)以當(dāng)前controlfile所紀(jì)錄的SCN為準(zhǔn),利用archive log和redo log的redo entry,把相關(guān)的datafile 的block恢復(fù)到“當(dāng)前controlfile所紀(jì)錄的SCN”。
recover database using backup controlfile:
Oracle需要把數(shù)據(jù)恢復(fù)到比當(dāng)前controlfile所紀(jì)錄的SCN還要靠后的位置(比如說(shuō):control file是backup controlfile,或者controlfile是根據(jù)trace create的。),這時(shí)候,就需要用using backup controlfile。 恢復(fù)就不會(huì)受“當(dāng)前controlfile所紀(jì)錄的SCN”的限制。只是想告訴數(shù)據(jù)庫(kù),我這個(gè)controlfile 是舊的,這個(gè)時(shí)候數(shù)據(jù)庫(kù)就會(huì)不斷應(yīng)用歸檔日志,它也不知道哪一個(gè)是最后的歸檔和當(dāng)前日志,需要限制就來(lái)自于你的語(yǔ)句(until time , until scn),或者可用的archive log(until cancel)。
=========================================================
首先這里我們先介紹四個(gè)SCN概念。
1、系統(tǒng)檢查點(diǎn)scn
當(dāng)一個(gè)檢查點(diǎn)動(dòng)作完成后,Oracle就把系統(tǒng)檢查點(diǎn)的SCN存儲(chǔ)到控制文件中。
select checkpoint_change# from v$database;
2,數(shù)據(jù)文件檢查點(diǎn)scn
當(dāng)一個(gè)檢查點(diǎn)動(dòng)作完成后,Oracle就把每個(gè)數(shù)據(jù)文件的scn單獨(dú)存放在控制文件中。
select name,checkpoint_change# from v$datafile;
3,啟動(dòng)scn
Oracle把這個(gè)檢查點(diǎn)的scn存儲(chǔ)在每個(gè)數(shù)據(jù)文件的文件頭中,這個(gè)值稱為啟動(dòng)scn,因?yàn)樗糜谠跀?shù)據(jù)庫(kù)實(shí)例啟動(dòng)時(shí),
檢查是否需要執(zhí)行數(shù)據(jù)庫(kù)恢復(fù)。
select name,checkpoint_change# from v$datafile_header
4、終止scn
每個(gè)數(shù)據(jù)文件的終止scn都存儲(chǔ)在控制文件中。
select name,last_change# from v$datafile
以下條件需要使用using backup controlfile
1)、使用備份控制文件
2)、重建resetlogs控制文件,如果重建立noresetlogs不必要使用using backup controlfile
2、alter database open resetlog
指定RESETLOGS將重設(shè)當(dāng)前LOG sequence number為1,拋棄所有日志信息。
以下條件需要使用resetlog
1)在不完全恢復(fù)(介質(zhì)恢復(fù))
2)使用備份控制文件
使用resetlogs打開(kāi)數(shù)據(jù)庫(kù)后無(wú)必完整地備份一次數(shù)據(jù)庫(kù)。
3、create controlfile resetlogs/noresetlogs
1).用Noresetlogs重建控制文件時(shí),控制文件中 datafile Checkpoint來(lái)自O(shè)nline logs中的Current log頭
2).用Resetlogs重建控制文件時(shí),控制文件中datafile Checkpoint來(lái)自各數(shù)據(jù)文件頭。
當(dāng)system scn,datafile scn,start scn 不全相等,需要介質(zhì)恢復(fù),如果stopscn null需要實(shí)例恢復(fù)
resetlogs拋棄所有在上一次恢復(fù)沒(méi)有用到的日志信息,確保不被重新用與恢復(fù)。
1、系統(tǒng)正常關(guān)閉:
system scn=datafile scn=start scn=stop scn
1)system scn=datafile scn=start scn,不需要介質(zhì)恢復(fù)
2)stopscn not null,不需要實(shí)例恢復(fù)
2、系統(tǒng)異常關(guān)閉:
system scn=datafile scn=start scn,stop scn null
1)system scn=datafile scn=start scn,不需要介質(zhì)恢復(fù)
2)stopscn null,需要實(shí)例恢復(fù)
3、舊數(shù)據(jù)文件
system scn=datafile scn>start scn,stop scn null/notnull
1)system scn=datafile scn>start scn,需要介質(zhì)恢復(fù)成system scn=datafile scn=start scn
2)stopscn null,需要實(shí)例恢復(fù),not null 不需要實(shí)例恢復(fù)
4、備份控制文件
system scn=datafile scn<=start scn(當(dāng)數(shù)據(jù)文件為舊的相等),stop scn notnull/null
1)system scn=datafile scn<=start scn,需要使用using backup controlfile介質(zhì)恢復(fù)成system scn=datafile scn=start scn=current log scn(當(dāng)前日志最大SCN)
2)為保證上一次恢復(fù)沒(méi)有用到log日志不被使用,必須resetlogs
5、重建noresetlogs控制文件
控制文件中 datafile Checkpoint來(lái)自O(shè)nline logs中的Current log頭
current log scn=system scn=datafile scn>=start scn,stop scn not null/null
1)current log scn=system scn=datafile scn>=start scn,需要介質(zhì)恢復(fù)成system scn=datafile scn=start scn=redolog scn(當(dāng)前日志最大SCN),stop scn not null
2)stopscn not null 不需要實(shí)例恢復(fù)
6、重建resetlogs控制文件
控制文件中datafile Checkpoint來(lái)自各數(shù)據(jù)文件頭。
system scn>=datafile scn=start scn,stop scn not null/null
1)system scn>=datafile scn=start scn,需要使用using backup controlfile介質(zhì)恢復(fù)成system scn=datafile scn=start scn(當(dāng)前日志最大SCN),stop scn not null
2)stop notnull,因?yàn)镾CN已經(jīng)為redolog scn,log已經(jīng)不能使用,必須resetlogs 。