資料檔案的SCN和資料塊的SCN有何區別

litterbaby發表於2007-06-16
資料檔案的SCN和資料塊的SCN有何區別[@more@]

資料檔案的SCN和資料塊的SCN有何區別

這個問題是PUB上一個朋友的問題,總結一下

資料檔案scn是指的是資料檔案第一個塊上的SCN,這個塊指的是表空間頭tablespace header,裡面記錄這很多資訊。其實在第一個塊上有很多SCN

例如:

create SCN 資料檔案新增時候的SCN

checkpoint SCN

recovery SCn

現在就按照資料檔案SCN理解為表空間頭塊上的checkpoint SCN來說

這個SCN和資料塊上的SCN之間的相同點都是SCN(廢話,呵呵),都具有SCN相同大小的結構。都是6個位元組。(都是廢話)

1、資料塊上有一個SCNSEQ來表示資料塊的版本,只要是為了在資料塊恢復的時候來標識用的,在我們對這個資料塊進行修改後,DBWR將這個修改的塊寫入到磁碟上,假如在沒有來得及將資料塊寫入磁碟的時候,資料塊crash了,下次重啟的時候,資料塊回自動對其進行恢復,這就要根據SCNSEQ來標識我們redo上的記錄是否適合這個資料塊的版本。如果redo = SCNSEQ,就會應用。如果redo < SCNSEQ,就會跳過。如果redo > SCNSEQ,乖乖不得了,這就會出現問題了,Oracle會告訴你block stuck,這時候就需要使用備份恢復了。

資料塊上SCN的功能,還有一個功能就是資料塊corrupt的校驗,在塊的尾部有一個6個位元組的tail,其中有4個位元組就是SCN的一部分。

透過這個和塊頭部的SCN比較,是檢查corrupt的條件之一。

2tablespace header上的checkpoint SCN 是幹什麼用的哪?這個主要在checkpoint上寫入的,就是說你在滿足一定的條件對這個資料檔案產生了checkpoint的時候,就會將當時的SCN寫入到資料檔案頭上。主要是做資料檔案恢復用的。或者是看看這個資料檔案是否需要恢復時候用的。因為在對這個資料檔案頭寫入的同時,還需要在控制檔案上寫入相同的SCN,在你做某些操作的時候,Oracle會比較控制檔案和資料檔案上的SCN,看看這個資料檔案是不是當前的資料檔案。舉一個簡單的例子吧。還說假如在開啟資料庫的時候,Oracle是怎麼知道我給的控制檔案和資料檔案是一致的哪,會不會拿一個很久之前的資料檔案來濫竽充數哪,Oracle也不傻,他會比較控制檔案上的SCN和這個資料檔案上的SCN是不是一致的,如果不是,Oracle會告訴你出現問題了。目的還是標識一個版本,做到資料的一致性。

那兩種有什麼關係那?

除了結構相同之外,我還真的沒有想出兩者之間有什麼必然的聯絡。不知道大牛有沒有知道的,謝謝

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/222350/viewspace-919055/,如需轉載,請註明出處,否則將追究法律責任。

相關文章