溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

對備份恢復(fù)有重要意義的控制文件記錄項

發(fā)布時間:2020-07-17 17:04:08 來源:網(wǎng)絡(luò) 閱讀:501 作者:qhd2004 欄目:數(shù)據(jù)庫

整理自:臨危不懼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ù)"



向AI問一下細(xì)節(jié)

免責(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)容。

AI