您好,登錄后才能下訂單哦!
整理自:臨危不懼oracle11g數(shù)據(jù)庫恢復(fù)技術(shù)
對備份恢復(fù)有重要意義的控制文件記錄項
dbid
dbid保存在控制文件中,在數(shù)據(jù)文件和日志文件的頭部也存在,其作用是判斷控制文件、數(shù)據(jù)文件、日志文件是否屬于同一個數(shù)據(jù)庫。
數(shù)據(jù)庫名
此信息與dbid一致。
控制文件序列號
該序列號是判斷控制文件是否過舊的要素之一,在控制文件被更新后就會增長。控制文件增長包括檢查點信息更新、創(chuàng)建或刪除表空間等。
控制文件序列號在數(shù)據(jù)文件和日志文件的頭部也有,但與控制文件中的不同,它們在自身的頭部被更新時從當(dāng)時的控制文件中復(fù)制的。
在庫運行時,當(dāng)數(shù)據(jù)文件和日志文件的頭部被更新后,控制文件必須復(fù)制其部分內(nèi)容,所以一般情況下,控制文件序列號必須大于數(shù)據(jù)文件和日志文件頭部中的控制文件序列號。否則,當(dāng)前控制文件被認(rèn)為是舊的。
select controlfile_sequence# from v$database;
select hxfil as file#,fhcsq as controlfile_sequence# from x$kcvfh;
oracle不會只依賴控制文件序列號來判斷控制文件是否舊的,還依賴控制文件檢查點,如果序列號檢驗沒有通過,那就沒有必要校驗控制文件檢查點scn了。
控制文件檢查點scn
該scn也是判斷控制文件是否是舊的要素之一。完全檢查點把scn更新到控制文件中和數(shù)據(jù)文件頭
而增量檢查點僅更新到控制文件中。無論哪一種檢查點,scn在控制文件中由一個稱為控制文件檢查點scn的記錄表示。
在數(shù)據(jù)庫open狀態(tài)下,該scn一定大于或是等于current日志文件中的低位scn(v$log.first_change#),同時,控制文件檢查點 SCN 的值一定大于所有數(shù)據(jù)文件頭部的檢查點SCN號,否則控制文件被認(rèn)為是舊的,實例恢復(fù)無法啟動。
select controlfile_sequence#,controlfile_change# from v$database;
select group#,sequence#,first_change# from v$log where status='CURRENT';
數(shù)據(jù)庫檢查點scn
控制文件中保存的數(shù)據(jù)庫檢查點scn實際是在所有數(shù)據(jù)文件頭部中最小的檢查點scn,根據(jù)它的值與每個日志文件的高、低scn比較,oracle確定需要使用哪個日志文件。
在線日志低位(first_change#)和高位scn(next_change#)
日志文件中重做記錄范圍由這兩個scn來表示,低位scn是指日志文件中第一條重做記錄的scn,高位scn是指下一個日志文件中的第一個重做記錄的scn
rman資料庫
在默認(rèn)情況下,控制文件即數(shù)據(jù)庫的rman資料庫。相關(guān)記錄包括:rman的配置、閃回日志路徑、重做日志歷史、歸檔路徑及屬性、rman備份集信息、rman鏡像復(fù)制信息、rman備份集和rman鏡像復(fù)制中損壞的塊信息、數(shù)據(jù)文件中壞塊信息等。
還原點信息
還原點是scn的別名,通過create restore point命令創(chuàng)建,主要用于閃回技術(shù),保存在控制文件中
重設(shè)日志scn
每次使用resetlogs子句打開數(shù)據(jù)庫時的scn,日志文件和數(shù)據(jù)文件頭部也會保存此scn,每次打開數(shù)據(jù)庫,oracle都會檢查它們是否一致,resetlogs一般是不完全恢復(fù)的結(jié)果。
Oracle內(nèi)部主要存在以下四種SCN
1.系統(tǒng)檢查點(system checkpoint)SCN
每當(dāng)一個檢查點完成時,Oracle就把該檢查點對應(yīng)的SCN記錄到控制文件中,可以用以下語句查看當(dāng)前數(shù)據(jù)庫 的檢查點SCN:
SYS@xbtst SQL>select checkpoint_change# from v$database; CHECKPOINT_CHANGE# ------------------ 2084301
2.數(shù)據(jù)文件頭SCN(數(shù)據(jù)文件的啟動SCN)
該SCN記錄在每個數(shù)據(jù)文件頭中,正常情況下,該SCN應(yīng)該和記錄在控制文件中的檢查點SCN一致,可以用以下語句查看數(shù)據(jù)文件頭的SCN:
SYS@xbtst SQL>select file#,checkpoint_change# from v$datafile_header; FILE# CHECKPOINT_CHANGE# ---------- ------------------ 1 2084301 2 2084301 3 2084301 4 2084301 5 2084301
3.數(shù)據(jù)文件的檢查點SCN和終止SCN
這兩個SCN不是記錄在數(shù)據(jù)文件中,而是記錄在控制文件中,可以通過以下語句查看:
SYS@xbtst SQL>select checkpoint_change#,last_change# from v$datafile; CHECKPOINT_CHANGE# LAST_CHANGE# ------------------ ------------ 2084301 2084301 2084301 2084301 2084301
那么Oracle是如何根據(jù)這些不同的SCN來判斷某個數(shù)據(jù)文件是否需要恢復(fù)以及恢復(fù)類型呢?可以用下面的偽代碼描述:
if (數(shù)據(jù)文件檢查點SCN < 數(shù)據(jù)文件頭SCN) then "控制文件來自備份,需要進(jìn)行不完全恢復(fù),恢復(fù)之后得用resetlog方式打開” else if (數(shù)據(jù)文件檢查點SCN > 數(shù)據(jù)文件頭SCN) then "數(shù)據(jù)文件來自備份,需要log進(jìn)行完全或不完全恢復(fù)" else if (數(shù)據(jù)文件檢查點SCN = 數(shù)據(jù)文件頭SCN) then "數(shù)據(jù)庫能正常open,還需要判斷是否需要實例恢復(fù)" if (數(shù)據(jù)文件終止SCN = 數(shù)據(jù)文件檢查點SCN) then "數(shù)據(jù)庫打開時不需要實例恢復(fù)“ else if (數(shù)據(jù)文件終止SCN = NULL) then "數(shù)據(jù)庫需要實例恢復(fù)"
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。