OracleSCN機(jī)制詳細(xì)解讀

深入剖析 - Oracle SCN機(jī)制詳細(xì)解讀

創(chuàng)新互聯(lián)建站專注于青銅峽企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站定制開發(fā)。青銅峽網(wǎng)站建設(shè)公司,為青銅峽等地區(qū)提供建站服務(wù)。全流程按需策劃設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

https://mp.weixin.qq.com/s?__biz=MjM5MDAxOTk2MQ==&mid=2650276971&idx=1&sn=b5fb89b351d5b5bedd6353ff9c0b2157&chksm=be479c7d8930156bf73bd87f0bac869029f7341b3fdb4ed26a838b4e401c811116669acd5499&mpshare=1&scene=24&srcid=0927zxmXBLuBo3yxm7qsFYOy#rd

http://blog.chinaunix.net/uid-20274021-id-1969571.html

SCN即系統(tǒng)改變號(hào)(System Change Number),是在某個(gè)時(shí)間點(diǎn)定義數(shù)據(jù)庫已提交版本的時(shí)間戳標(biāo)記。 Oracle為每個(gè)已提交的事務(wù)分配一個(gè)唯一的SCN。 SCN的值是對(duì)數(shù)據(jù)庫進(jìn)行更改的邏輯時(shí)間點(diǎn)。 Oracle使用此編號(hào)記錄對(duì)數(shù)據(jù)庫所做的更改。 在數(shù)據(jù)庫中,SCN也可以說是無處不在,數(shù)據(jù)文件頭,控制文件,數(shù)據(jù)塊頭,日志文件等等都標(biāo)記著SCN。也正是這樣,數(shù)據(jù)庫的一致性維護(hù)和SCN密切相關(guān)。不管是數(shù)據(jù)的備份,恢復(fù)都是離不開SCN的。

在理解這幾種SCN之前,我們先看下oracle事務(wù)中的數(shù)據(jù)變化是如何寫入數(shù)據(jù)文件的:

第一步:事務(wù)開始;

第二步:在buffer cache中找到需要的數(shù)據(jù)塊,如果沒找到,從數(shù)據(jù)文件中載入buffer cache中;

第三步:事務(wù)修改buffer cache的數(shù)據(jù)塊,該數(shù)據(jù)被標(biāo)識(shí)為“臟數(shù)據(jù)”,并被寫入log buffer中;

第四步:事務(wù)提交,LGWR進(jìn)程將log buffer中的“臟數(shù)據(jù)”的日志條目寫入redo log file中;

第五步:當(dāng)發(fā)生checkpoint,CKPT進(jìn)程更新所有數(shù)據(jù)文件的文件頭中的信息,DBWn進(jìn)程則負(fù)責(zé)將Buffer Cache中的臟數(shù)據(jù)

寫入到數(shù)據(jù)文件中。

經(jīng)過上述5個(gè)步驟,事務(wù)中的數(shù)據(jù)變化最終被寫入到數(shù)據(jù)文件中。但是,一旦在上述中間環(huán)節(jié)數(shù)據(jù)庫意外宕機(jī)了,在重新啟 動(dòng)時(shí)

如何知道哪些數(shù)據(jù)已經(jīng)寫入數(shù)據(jù)文件、哪些沒有寫呢?(同樣,在DG、streams中也存在

類似疑問:redolog中哪些是上一次同步已經(jīng)復(fù)制過的數(shù)據(jù)、哪些沒有)

SCN機(jī)制就能比較完善的解決上述問題。 SCN是一個(gè)數(shù)字,確切的說是一個(gè)只會(huì)增加、不會(huì)減少的數(shù)字。正是它這種只會(huì)增

加的特性確保了 Oracle知道哪些應(yīng)該被恢復(fù)、哪些應(yīng)該被復(fù)制。

首先這里我們先介紹四個(gè)SCN概念。

1、系統(tǒng)檢查點(diǎn)scn (System Checkpoint SCN)

當(dāng)一個(gè)checkpoint檢查點(diǎn)動(dòng)作完成后,Oracle就把系統(tǒng)檢查點(diǎn)的SCN存儲(chǔ)到 控制文件中。

select checkpoint_change# from v$database;

2,數(shù)據(jù)文件檢查點(diǎn)scn (Datafile Checkpoint SCN)

當(dāng)一個(gè)checkpoint動(dòng)作完成后,Oracle就把每個(gè)數(shù)據(jù)文件的Datafile Checkpoint SCN 單獨(dú)存放在控制文件中。

select name,checkpoint_change# from v$datafile;

3,啟動(dòng)scn (Start SCN)

Oracle把這個(gè)檢查點(diǎn)的scn 存儲(chǔ)在每個(gè)數(shù)據(jù)文件的文件頭中,這個(gè)值稱為啟動(dòng)scn,這個(gè)SCN用于用于在數(shù)據(jù)庫實(shí)例啟動(dòng)時(shí),檢查是否需要執(zhí)行數(shù)據(jù)庫恢復(fù)media recovery。

select name,checkpoint_change# from v$datafile_header;

4、終止scn (Stop SCN)

每個(gè)數(shù)據(jù)文件的終止scn都 存儲(chǔ)在控制文件中。這個(gè)SCN號(hào)用于檢查數(shù)據(jù)庫啟動(dòng)過程是否需要做instance recovery。

select name,last_change# from v$datafile;

5.media recovery和instance recovery

1).media recovery是需要利用以前的備份來進(jìn)行恢復(fù)的,而INSTANCE RECOVERY是不需要的。

2).media recovery通常發(fā)生在數(shù)據(jù)庫的數(shù)據(jù)文件之類發(fā)生損壞,需要利用以前的備份來進(jìn)行的恢復(fù),需要人工處理。

3).instance recovery則是發(fā)生在實(shí)例不正常關(guān)閉情況下的恢復(fù),是INSTANCE自己來的,不需要人工干預(yù)的。

6、在數(shù)據(jù)庫運(yùn)行期間的scn值

1).在數(shù)據(jù)庫打開并運(yùn)行之后,控制文件中的 系統(tǒng)檢查點(diǎn)、控制文件中的 數(shù)據(jù)文件檢查點(diǎn)scn和每個(gè)數(shù)據(jù)文件頭中的 啟動(dòng)scn都是相同的??刂莆募械拿總€(gè)數(shù)據(jù)文件的 終止scn都為null.

2).在安全關(guān)閉數(shù)據(jù)庫的過程中,系統(tǒng)會(huì)執(zhí)行一個(gè)檢查點(diǎn)動(dòng)作,這時(shí)所有數(shù)據(jù)文件的 終止scn都會(huì)設(shè)置成數(shù)據(jù)文件頭中的那個(gè) 啟動(dòng)scn的值。

3).在數(shù)據(jù)庫重新啟動(dòng)的時(shí)候,Oracle將文件頭中的那個(gè) 啟動(dòng)scn與 數(shù)據(jù)文件檢查點(diǎn)scn進(jìn)行比較,如果這兩個(gè)值相互匹配,oracle接下來還要比較數(shù)據(jù)文件頭中的 啟動(dòng)scn和控制文件中數(shù)據(jù)文件的 終止scn。如果這兩個(gè)值也一致,就意味著所有數(shù)據(jù)塊多已經(jīng)提交,所有對(duì)數(shù)據(jù)庫的修改都沒有在關(guān)閉數(shù)據(jù)庫的過程中丟失,因此這次啟動(dòng)數(shù)據(jù)庫的過程也不需要任何恢復(fù)操作,此時(shí)數(shù)據(jù)庫就可以打開了。當(dāng)所有的數(shù)據(jù)庫都打開之后,存儲(chǔ)在控制文件中的數(shù)據(jù)文件 終止scn的值再次被更改為null,這表示數(shù)據(jù)文件已經(jīng)打開并能夠正常使用了。   

7.SCN與數(shù)據(jù)庫啟動(dòng)

在數(shù)據(jù)庫啟動(dòng)過程中,當(dāng) System Checkpoint SCN、Datafile Checkpoint SCN和Start SCN都相同時(shí),數(shù)據(jù)庫可以正常啟動(dòng),不需要做media recovery。三者當(dāng)中有一個(gè)不同時(shí),則需要做media recovery.如果在啟動(dòng)的過程中, End SCN為NULL,則需要做instance recovery。Oracle在啟動(dòng)過程中首先檢查是否需要media recovery,然后再檢查是否需要instance recovery。

8.SCN與數(shù)據(jù)庫關(guān)閉

如果數(shù)據(jù)庫的正常關(guān)閉的話,將 會(huì)觸發(fā)一個(gè)checkpoint同時(shí)將數(shù)據(jù)文件的 END SCN設(shè)置為相應(yīng)數(shù)據(jù)文件的 Start SCN。當(dāng)數(shù)據(jù)庫啟動(dòng)時(shí),發(fā)現(xiàn)它們是一致的,則不需要做instance recovery。在數(shù)據(jù)庫正常啟動(dòng)后,ORACLE會(huì)將END SCN設(shè)置為NULL.如果數(shù)據(jù)庫異常關(guān)閉的話,則END SCN將為NULL。

9.恢復(fù)數(shù)據(jù)庫時(shí)什么時(shí)候需要using backup controlfile

數(shù)據(jù)文件檢查點(diǎn)scn(Datafile Checkpoint SCN)

select checkpoint_change# from v$datafile;

啟動(dòng)scn(Start SCN)

select checkpoint_change# from v$datafile_header;

如果查詢結(jié)果 數(shù)據(jù)文件檢查點(diǎn)scn >= 啟動(dòng)scn,則不需要使用using backup controlfile;

如果查詢結(jié)果 數(shù)據(jù)文件檢查點(diǎn)scn < 啟動(dòng)scn,則需要使用using backup controlfile;

本文題目:OracleSCN機(jī)制詳細(xì)解讀
本文地址:http://bm7419.com/article20/goecjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、網(wǎng)站改版、網(wǎng)站建設(shè)、微信小程序、營銷型網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)