版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、弄懂幾個概念:redo是重做日志文件,是oracle數(shù)據(jù)庫的日志文件.oracle的重做日志有兩種:在線重做日志以及歸檔重做日志。在線重做日志:主要用于由于數(shù)據(jù)庫主機掉電等原因?qū)е聦嵗。藭roracle采用在線重做日志在數(shù)據(jù)庫啟動時將數(shù)據(jù)庫恢復到歸檔重做日志:主要用于介質(zhì)失敗,比如:磁盤受損。此時需要使用對磁盤上的數(shù)據(jù)備份的歸動重做日志文件將該磁盤上的數(shù)據(jù)恢復到該歸檔文件數(shù)據(jù)所在的時間點上,然后再使用在線重做日志文件將適合的時間點上。歸檔重做日志文件實質(zhì)是被添滿的舊的在線重做日志的副本。歸檔重做日志文件是數(shù)據(jù)庫的歷史數(shù)據(jù)。在線重做日志在每個數(shù)據(jù)庫中至少有兩個重做日志組,每個日志組中至少有一
2、個重做日志文件,這些在線重做日志組是循環(huán)使用的,當日志組1被寫到最后時,然后自動切換到日志組2;當日志組2也被寫滿時,再切換到日志組1。undo與redo相反,redo是恢復數(shù)據(jù),用于在事務失敗時重放事務,undo是撤消一條語句或者一組語句的作用oundo是存儲在數(shù)據(jù)庫內(nèi)部的段或者表空間中(undo如果是手動管理,則使用undo段來管理;如果undo使用AUM管理UNDO,則undo使用表空間來自動管理)。注意:在undo并不是物理的恢復到執(zhí)行語句之前或者事務之前的樣子,只是邏輯的恢復到原來的樣子,所有修改只是邏輯的取消,但是數(shù)據(jù)結構和數(shù)據(jù)塊在回滾之后也大不相同。原因是在多用戶系統(tǒng)中,有很多事
3、務是并發(fā)進行的,當一個事務修改一個數(shù)據(jù)并且被回滾,但是該數(shù)據(jù)在該用戶對該數(shù)據(jù)做過修改之后也也有被其他用戶修改,這個時候如果是對該事務修改的數(shù)據(jù)塊回滾到原來數(shù)據(jù)的物理樣子,就有可能將后來的事務所做的修改給覆蓋掉。所以回滾不是一個簡單的物理的恢復,而是邏輯恢復。例如:做下面的步驟:SQLdroptablet;表已刪除。SQLcreatetablet表已創(chuàng)建。SQLselect*fromt;未選定行SQLsetautotracetraceonlystatisticsSQLselect*fromt;未選定行統(tǒng)計信息992bytessentviaSQL*Nettoclient374bytesreceiv
4、edviaSQL*Netfromclient1SQL*Netroundtripsto/fromclientSQLsetautotraceoff;注意:在每個用例做2次全表掃描,這樣是為了避免解析和優(yōu)化期間優(yōu)化器可能產(chǎn)生的額外的I/O,測試只需要比較第二次的查詢情況SQLinsertintotselect*fromall_objects;統(tǒng)計信息676bytessentviaSQL*Nettoclient575bytesreceivedviaSQL*Netfromclient4SQL*Netroundtripsto/fromclientSQLrollback;回退已完成。SQLselect*fr
5、omt;未選定行SQLsetautotracetraceonlystatisticsSQLselect*fromt;未選定行統(tǒng)計信息992bytessentviaSQL*Nettoclient374bytesreceivedviaSQL*Netfromclient1SQL*Netroundtripsto/fromclientSQLsetautotraceoff;分析:在進行插入操作的時候數(shù)據(jù)庫為該表分配可新的數(shù)據(jù)塊,表示表所占用的空間變大。進行插入操作,表得到新的數(shù)據(jù)塊,然后格式化新的數(shù)據(jù)塊,然后準備放數(shù)據(jù)進入;此時另一個事務是回滾這些數(shù)據(jù),此時回滾并不能將新分配給表的空間給撤消掉,也不能取消
6、對數(shù)據(jù)塊的格式化操作,實際做的是與原來的邏輯相反的工作,insert操作相反的操作是delete,delete相反的操作是insert操作,操作相反的操作是另外執(zhí)行一個update操作將其變?yōu)樵瓉淼男小ndo信息是存放在UNDO表空間或者UNDO段中,也會受REDO保護,即表示會將UNDO數(shù)據(jù)當做表數(shù)據(jù)或者是索引數(shù)據(jù)一樣,對UNDO的修改也會產(chǎn)生一些REDO,這些REDO信息也會被記錄到日志中去。為什么會這樣?在下面講解系統(tǒng)崩潰發(fā)生的情況會解釋oundo數(shù)據(jù)會被加到UNDO段有下面的三句語句:insertintot(x,y)values(1,1);updatetsetx=x+1wherex=
7、1;deletefromtwherex=2;假設沿著不同的路徑完成這個事務,得到不同的答案:路徑1:如果系統(tǒng)在處理這些語句的不同時間點上失敗,會發(fā)生什么情況;對于第一條語句進行的insertinto語句,redo和undo都會生成。所生成的UNDO足以撤消insert操作的作用;所生成的REDO可以使這個插入操作再次復現(xiàn);圖中顯示了緩存中存放的已經(jīng)被修改的UNDO塊,索引塊和表數(shù)據(jù)塊,這些數(shù)據(jù)塊都得到了重做日志緩沖區(qū)中相應的redo項保存;系統(tǒng)現(xiàn)在崩潰沒有關系。SGA會被清空,但是SGA中的內(nèi)容我們并不需要。因為在系統(tǒng)重新啟動時就好象這個事務沒有發(fā)生過一樣。沒有任何已修改的塊刷新輸出到磁盤,也
8、沒有任何REDO刷新輸出到磁盤,這樣就不需要這些undo和redo信息來實現(xiàn)實例恢復;由于緩存區(qū)已滿,所以DBWR進程需要將已修改的數(shù)據(jù)塊從緩存中刷新寫入磁盤中去來留出空閑的空間。如果是這樣,DBWR首先是要求LGWR進程將這些已被修改的數(shù)據(jù)塊的相關的REDO條目信息先刷新寫入重做日志文件中去oDBWR在做任何將已被修改的數(shù)據(jù)塊寫進磁盤中之前,都要做首先通知LGWR進程先將這些塊相關的REDO信息寫入重做日志文件中去。假設沒有這樣的話,在DBWR將被修改的數(shù)據(jù)塊寫進磁盤之前沒有通知LGWR進程將REDO信息寫進重做日志文件,一旦系統(tǒng)失敗的話,就只有被修改的數(shù)據(jù),而沒有與之相關的REDO信息而造
9、成系統(tǒng)不能很好的恢復。但是如果進行了通知LGWR進程先將這些塊相關的REDO信息寫入重做日志文件中去的話,這樣就能夠重做所有的修改,將SGA恢復到系統(tǒng)失敗前的狀態(tài),從而可以成功回滾。從圖1中可以看出,生成的被修改的書數(shù)據(jù)塊和索引塊,以及與這些被修改的數(shù)據(jù)塊相關的UNDO段塊,這三部分都會生成REDO來保護自己的。重做日志緩沖區(qū)刷新輸出的條件:每3秒一次;緩沖區(qū)達到1/3滿時;或者包含1M的緩沖數(shù)據(jù);或者是只要發(fā)生事務提交就會發(fā)生刷新輸出;重做日志緩沖區(qū)很有可能會在處理期間的某個時間點上刷新輸出,并且刷新輸出的狀態(tài)是如圖2:大;由于是更新,需要保存更新前的數(shù)據(jù),即“前”映象。塊緩沖區(qū)中會有更多新
10、的UNDO塊,為了也能夠撤消這個更新,如果有必要,已修改的數(shù)據(jù)庫整張表和索引塊也會放到緩存中,也會生成更多的重做日志緩沖區(qū)條目。下面假設前面的插入語句生成了一些重做日志,有部分被寫進重做日志文件中,但是還有一些仍存放在緩存中。該場景涵蓋了系統(tǒng)崩潰恢復的基本細節(jié)。系統(tǒng)將其作為一個2步的過程來完成。首先前滾,將系統(tǒng)放到失敗的點上,然后回滾尚未提交的所有工作,這個動作會再次同步數(shù)據(jù)文件。它會重放已經(jīng)進行的工作,并撤消尚未完成的所有工作。第一步:前滾,將系統(tǒng)放到失敗的時間點上:系統(tǒng)啟動時,系統(tǒng)會讀取重做日志,發(fā)現(xiàn)有相關的事務的一些重做日志條目。給定系統(tǒng)的當前狀態(tài),利用重做日志文件中對應插入的REDO條
11、目,還有仍在緩沖區(qū)中的一些對應的REDO信息,oracle會前滾插入;(前面講系統(tǒng)崩潰,SGA被清空,那么在這里應該也會清空緩沖區(qū)中的REDO信息的呀?但是為什么還仍然繼續(xù)存在?這里的緩沖區(qū)不在SGA中嗎?)前滾得到圖1中的狀態(tài)。第二步:如果發(fā)現(xiàn)前面的插入操作還沒有提交,并且這個插入語句對應的UNDO塊(用于撤消插入),已修改的表塊(剛插入后的狀態(tài)),以及已修改的索引塊(剛插入后的狀態(tài)),此時系統(tǒng)會使用上面的這些UNDO信息來回滾。系統(tǒng)取剛剛在緩沖區(qū)緩存中前滾得到的UNDO,并將這些UNDO應用到數(shù)據(jù)塊和索引塊,使數(shù)據(jù)塊和索引塊恢復到插入前的系統(tǒng)狀態(tài)。這樣回到插入前的狀態(tài),但是在磁盤上的塊可能
12、會反映插入后的數(shù)據(jù),也可能不反映(這個取決于崩潰前DBWR是否進行塊刷新輸出將數(shù)據(jù)寫進磁盤)。如果磁盤中的塊確實反映了插入,而實際上插入已經(jīng)被撤消。此時這個只有在當緩沖區(qū)緩存刷新輸出塊時,數(shù)據(jù)文件就會被重新寫,使得數(shù)據(jù)文件反映出插入已撤消。如果磁盤上的塊沒有反映前面的插入,就不用管它-這些塊以后會被覆蓋。假設場景:應用回滾事務Oracle發(fā)現(xiàn)這個事務的UNDO信息可能在緩存的UNDO段中塊中(基本上這樣),也可能這個事物的UNDO信息已經(jīng)被刷新寫進磁盤中去(當大事務會有這種情況發(fā)生)。系統(tǒng)會將UNDO信息應用到緩沖區(qū)緩存中的數(shù)據(jù)塊和索引塊上,或者如果這些需要回滾的數(shù)據(jù)塊已經(jīng)不在緩存中,則就需要
13、從磁盤中將對應的數(shù)據(jù)和索引塊讀入緩存,再對其進行應用UNDO。這些塊會恢復為原來的行值,并刷新輸出到數(shù)據(jù)文件寫進磁盤中去。需要指出一點:回滾過程不涉及對重做日志,只有在恢復和歸檔時才會讀取重做日志。Oracle在正常情況下,不會重做日志進行讀取操作。Oracle的目標是:可以順序地寫日志,而且在寫日志時別人不會讀日志,這樣主要是為了提高性能和避免資源競爭。DELETE會生成UNDO,塊被修改,并且將REDO寫到重做日志緩沖區(qū)中。這個與前面的UPDATE差不多。COMMIT,此時oracle會將日志緩沖區(qū)刷新輸出到磁盤中去。如圖4:已修改的數(shù)據(jù)塊或者還在緩沖區(qū)緩存中;也有可能被寫進磁盤中去。但是
14、重做這個事務的所有REDO信息都被寫進磁盤中去,此時就表示這個數(shù)據(jù)的修改是永久的了。如果有讀取文件中的數(shù)據(jù)不是事務發(fā)生之后的樣子,這個是由于DBWR還沒有立即寫進磁盤的原因,這個不要緊。如果出現(xiàn)讀取失敗,可以通過重做日志文件來得到最新的塊信息。UNDO信息也存在(除非UNDO被重用),UNDO信息存在就可以保證數(shù)據(jù)的一致性,可以回滾到過去某個時間點上的數(shù)據(jù)。COMMIT操作是一個很快的操作,并且每個COMMIT操作其響應的時間或多或少是平均的,不管事務的大小。取決于前三項的大小,以及這些花費的時間,前面的某個數(shù)據(jù)(或者是某些數(shù)據(jù))被刷新寫入磁盤;*LGWR將所有余下的緩存重做日志條目寫到磁盤中
15、,并將SCN記錄到在線蟲做日志文件中,這步的完成表示事務提交的真正完成。此時,事務條目會從V$TRANSACTION視圖中刪除掉,表示事務已經(jīng)提交;*如果事務修改的數(shù)據(jù)塊還有部分還沒有寫入磁盤,則會一種快速的模式訪問并“清理“。塊清理(blockcleanout)是指清除存儲在數(shù)據(jù)庫首部的與鎖相關的信息。實質(zhì)是清除塊上的事務信息。這樣下一個訪問這個塊的人就不用再做塊清理了操作了。這種是采用一種無需生成重做日志信息的方式來完成塊清除。由上可以看出,處理CMMIT操作所要的做的工作很少,耗時最長的是LGWR執(zhí)行的將REDO寫進磁盤的操作,因為這個操作進行了物理磁盤I/O。但是CMMIT又是很快的原因是在于LGWR在你的工作期間一直在以連續(xù)的方式將重做日志緩沖區(qū)的內(nèi)容寫進磁盤中,同時LGWR也一直在以增量的方式來不停的刷新重做日志緩沖區(qū)中的內(nèi)容。這樣避免一次性將大量REDO寫進磁盤操
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 聘用合同補充協(xié)議的簽訂與履行期限
- 立式冷熱型直飲水機購銷合同
- 建筑施工監(jiān)理合同協(xié)議
- 墻繪施工合同示范
- 場地服務合同協(xié)議書范本規(guī)范
- 貸款合同續(xù)簽注意事項
- 房屋裝修及維護服務合同
- 農(nóng)產(chǎn)品購買合同心得
- 房屋買賣合同見證律師服務解析
- 房屋拆遷與買賣合同關系
- 2024春期國開電大本科《經(jīng)濟學(本)》在線形考(形考任務1至6)試題及答案
- 四川省公需科目(數(shù)字經(jīng)濟與驅(qū)動發(fā)展)考試題庫及答案
- 2024年中國eVTOL產(chǎn)業(yè)(低空經(jīng)濟)發(fā)展報告
- 智慧醫(yī)療信息化建設項目技術標準建設方案
- 電化學儲能電站安全規(guī)程
- 摩托車品牌文化營銷與品牌故事的構建
- 2024江蘇南京大數(shù)據(jù)集團有限公司招聘筆試參考題庫附帶答案詳解
- FZT 73032-2017 針織牛仔服裝
- 治療用碘131I化鈉膠囊-臨床用藥解讀
- 2022年汕頭市中小學教學研究中心招聘專職教研員考試試卷及答案解析
- 2024外研版初中英語單詞表匯總(七-九年級)中考復習必背
評論
0/150
提交評論