【摘要】
當使用resetlogs打開數據庫以後,就會產生一個incarnation,它的作用是爲了避免應用不同時間產生卻擁有相同scn的日誌。數據庫存在多個incarnation決定了它如何對待不是當前incarnation的備份集,一般情況下,使用當前incarnation進行恢復是最好的選擇,但有時不滿足於基於時間點恢復的結果,就需要返回到之前的incarnation進行恢復。
【正文】
Incarnation簡介
一個新實例的scn從1開始,當scn遞增到2000時,進行不完全恢復到scn 1000,此時incarnation 1包含scn 1到2000;當scn從1000增長到3000時,再次進行不完全恢復到scn2000,此時incarnation 2包含scn 1000到3000,當前incarnation 3 從scn 2000開始遞增。如果要恢復到一個不屬於當前incarnation的scn,就要用到reset database to incarnation語句。
以下是測試過程:
當前incarnation 5,初始SCN爲7966706。
查看備份集相鄰SCN
從當前7966705恢復到7967501
run{
allocate channel ch1 type disk;
allocate channel ch2 type disk;
allocate channel ch3 type disk;
restore database;
recover database until scn 7967501;
release channel ch1;
release channel ch2;
release channel ch3;
}
完成恢復並打開數據庫
查看當前incarnation
此時基於incarnation 6恢復到scn 7966873
run{
allocate channel ch1 type disk;
allocate channel ch2 type disk;
allocate channel ch3 type disk;
restore database;
recover database until scn 7966873;
release channel ch1;
release channel ch2;
release channel ch3;
}
出現報錯
切換到incarnation 5再次執行恢復
恢復完成以resetlogs方式成功打開,初始SCN爲7966874
【總結】
當執行多次不完全恢復時,需要清楚知道scn所在的incarnation,基於不同的incarnation進行可行的業務恢復。