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