新聞中心
整理自:臨危不懼oracle11g數(shù)據(jù)庫(kù)恢復(fù)技術(shù)
類烏齊網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)2013年開創(chuàng)至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
對(duì)備份恢復(fù)有重要意義的控制文件記錄項(xiàng)
dbid
dbid保存在控制文件中,在數(shù)據(jù)文件和日志文件的頭部也存在,其作用是判斷控制文件、數(shù)據(jù)文件、日志文件是否屬于同一個(gè)數(shù)據(jù)庫(kù)。
數(shù)據(jù)庫(kù)名
此信息與dbid一致。
控制文件序列號(hào)
該序列號(hào)是判斷控制文件是否過舊的要素之一,在控制文件被更新后就會(huì)增長(zhǎng)??刂莆募鲩L(zhǎng)包括檢查點(diǎn)信息更新、創(chuàng)建或刪除表空間等。
控制文件序列號(hào)在數(shù)據(jù)文件和日志文件的頭部也有,但與控制文件中的不同,它們?cè)谧陨淼念^部被更新時(shí)從當(dāng)時(shí)的控制文件中復(fù)制的。
在庫(kù)運(yùn)行時(shí),當(dāng)數(shù)據(jù)文件和日志文件的頭部被更新后,控制文件必須復(fù)制其部分內(nèi)容,所以一般情況下,控制文件序列號(hào)必須大于數(shù)據(jù)文件和日志文件頭部中的控制文件序列號(hào)。否則,當(dāng)前控制文件被認(rèn)為是舊的。
select controlfile_sequence# from v$database;
select hxfil as file#,fhcsq as controlfile_sequence# from x$kcvfh;
oracle不會(huì)只依賴控制文件序列號(hào)來判斷控制文件是否舊的,還依賴控制文件檢查點(diǎn),如果序列號(hào)檢驗(yàn)沒有通過,那就沒有必要校驗(yàn)控制文件檢查點(diǎn)scn了。
控制文件檢查點(diǎn)scn
該scn也是判斷控制文件是否是舊的要素之一。完全檢查點(diǎn)把scn更新到控制文件中和數(shù)據(jù)文件頭
而增量檢查點(diǎn)僅更新到控制文件中。無論哪一種檢查點(diǎn),scn在控制文件中由一個(gè)稱為控制文件檢查點(diǎn)scn的記錄表示。
在數(shù)據(jù)庫(kù)open狀態(tài)下,該scn一定大于或是等于current日志文件中的低位scn(v$log.first_change#),同時(shí),控制文件檢查點(diǎn) SCN 的值一定大于所有數(shù)據(jù)文件頭部的檢查點(diǎn)SCN號(hào),否則控制文件被認(rèn)為是舊的,實(shí)例恢復(fù)無法啟動(dòng)。
select controlfile_sequence#,controlfile_change# from v$database;
select group#,sequence#,first_change# from v$log where status='CURRENT';
數(shù)據(jù)庫(kù)檢查點(diǎn)scn
控制文件中保存的數(shù)據(jù)庫(kù)檢查點(diǎn)scn實(shí)際是在所有數(shù)據(jù)文件頭部中最小的檢查點(diǎn)scn,根據(jù)它的值與每個(gè)日志文件的高、低scn比較,oracle確定需要使用哪個(gè)日志文件。
在線日志低位(first_change#)和高位scn(next_change#)
日志文件中重做記錄范圍由這兩個(gè)scn來表示,低位scn是指日志文件中第一條重做記錄的scn,高位scn是指下一個(gè)日志文件中的第一個(gè)重做記錄的scn
rman資料庫(kù)
在默認(rèn)情況下,控制文件即數(shù)據(jù)庫(kù)的rman資料庫(kù)。相關(guān)記錄包括:rman的配置、閃回日志路徑、重做日志歷史、歸檔路徑及屬性、rman備份集信息、rman鏡像復(fù)制信息、rman備份集和rman鏡像復(fù)制中損壞的塊信息、數(shù)據(jù)文件中壞塊信息等。
還原點(diǎn)信息
還原點(diǎn)是scn的別名,通過create restore point命令創(chuàng)建,主要用于閃回技術(shù),保存在控制文件中
重設(shè)日志scn
每次使用resetlogs子句打開數(shù)據(jù)庫(kù)時(shí)的scn,日志文件和數(shù)據(jù)文件頭部也會(huì)保存此scn,每次打開數(shù)據(jù)庫(kù),oracle都會(huì)檢查它們是否一致,resetlogs一般是不完全恢復(fù)的結(jié)果。
Oracle內(nèi)部主要存在以下四種SCN
1.系統(tǒng)檢查點(diǎn)(system checkpoint)SCN
每當(dāng)一個(gè)檢查點(diǎn)完成時(shí),Oracle就把該檢查點(diǎn)對(duì)應(yīng)的SCN記錄到控制文件中,可以用以下語(yǔ)句查看當(dāng)前數(shù)據(jù)庫(kù) 的檢查點(diǎn)SCN:
SYS@xbtst SQL>select checkpoint_change# from v$database; CHECKPOINT_CHANGE# ------------------ 2084301
2.數(shù)據(jù)文件頭SCN(數(shù)據(jù)文件的啟動(dòng)SCN)
該SCN記錄在每個(gè)數(shù)據(jù)文件頭中,正常情況下,該SCN應(yīng)該和記錄在控制文件中的檢查點(diǎn)SCN一致,可以用以下語(yǔ)句查看數(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ù)文件的檢查點(diǎn)SCN和終止SCN
這兩個(gè)SCN不是記錄在數(shù)據(jù)文件中,而是記錄在控制文件中,可以通過以下語(yǔ)句查看:
SYS@xbtst SQL>select checkpoint_change#,last_change# from v$datafile; CHECKPOINT_CHANGE# LAST_CHANGE# ------------------ ------------ 2084301 2084301 2084301 2084301 2084301
那么Oracle是如何根據(jù)這些不同的SCN來判斷某個(gè)數(shù)據(jù)文件是否需要恢復(fù)以及恢復(fù)類型呢?可以用下面的偽代碼描述:
if (數(shù)據(jù)文件檢查點(diǎn)SCN < 數(shù)據(jù)文件頭SCN) then "控制文件來自備份,需要進(jìn)行不完全恢復(fù),恢復(fù)之后得用resetlog方式打開” else if (數(shù)據(jù)文件檢查點(diǎn)SCN > 數(shù)據(jù)文件頭SCN) then "數(shù)據(jù)文件來自備份,需要log進(jìn)行完全或不完全恢復(fù)" else if (數(shù)據(jù)文件檢查點(diǎn)SCN = 數(shù)據(jù)文件頭SCN) then "數(shù)據(jù)庫(kù)能正常open,還需要判斷是否需要實(shí)例恢復(fù)" if (數(shù)據(jù)文件終止SCN = 數(shù)據(jù)文件檢查點(diǎn)SCN) then "數(shù)據(jù)庫(kù)打開時(shí)不需要實(shí)例恢復(fù)“ else if (數(shù)據(jù)文件終止SCN = NULL) then "數(shù)據(jù)庫(kù)需要實(shí)例恢復(fù)"
分享題目:對(duì)備份恢復(fù)有重要意義的控制文件記錄項(xiàng)
文章轉(zhuǎn)載:http://www.dlmjj.cn/article/pgjspe.html