您好,登錄后才能下訂單哦!
undo:撤銷,也就是取消之前的操作。
redo:重做,重新執(zhí)行一遍之前的操作。
什么是REDO
REDO記錄transaction logs,分為online和archived。以恢復(fù)為目的。
比如,機(jī)器停電,那么在重起之后需要online redo logs去恢復(fù)系統(tǒng)到失敗點(diǎn)。
比如,磁盤壞了,需要用archived redo logs和online redo logs去恢復(fù)數(shù)據(jù)。
比如,truncate一個(gè)表或其他的操作,想恢復(fù)到之前的狀態(tài),同樣也需要。
什么是UNDO
REDO 是為了重新實(shí)現(xiàn)你的操作,而UNDO相反,是為了撤銷你做的操作,比如你得一個(gè)TRANSACTION執(zhí)行失敗了或你自己后悔了,
則需要用 ROLLBACK命令回退到操作之前?;貪L是在邏輯層面實(shí)現(xiàn)而不是物理層面,因?yàn)樵谝粋€(gè)多用戶系統(tǒng)中,數(shù)據(jù)結(jié)構(gòu),blocks等都
在時(shí)時(shí)變化,比如我們 INSERT一個(gè)數(shù)據(jù),表的空間不夠,擴(kuò)展了一個(gè)新的EXTENT,我們的數(shù)據(jù)保存在這新的EXTENT里,其它用戶隨后
也在這EXTENT里插入了數(shù)據(jù),而此時(shí)我想ROLLBACK,那么顯然物理上講這EXTENT撤銷是不可能的,因?yàn)檫@么做會(huì)影響其他用戶的操作
。所以,ROLLBACK是邏輯上回滾,比如對(duì)INSERT來說,那么ROLLBACK就是DELETE了。
一.undo中數(shù)據(jù)的特點(diǎn):
1。是數(shù)據(jù)修改前的備份,主要是保證用戶的讀一致性
2. 在事務(wù)修改數(shù)據(jù)時(shí)產(chǎn)生
3。至少保存到事務(wù)結(jié)束
二。undo數(shù)據(jù)的作用:
1.回滾(rollback)操作
2.實(shí)現(xiàn)讀一致性與閃回查詢
3.從失敗的事務(wù)中還原數(shù)據(jù)
4. 非正常停機(jī)后的實(shí)例恢復(fù)
三.undo回滾段的特點(diǎn):
1.回滾段是由實(shí)例自動(dòng)創(chuàng)建用于支持事務(wù)運(yùn)行的專用段,同樣是區(qū)和塊組成,回滾頂會(huì)按實(shí)際需要自動(dòng)進(jìn)行增長或收縮,是一段可以
給指定事務(wù)循環(huán)使用的存儲(chǔ)緩沖區(qū)。
2.每個(gè)事務(wù)只會(huì)使用一個(gè)回滾段,一個(gè)回滾段在同一時(shí)刻可能會(huì)服務(wù)于多個(gè)事務(wù)
3.當(dāng)一個(gè)事務(wù)開始的時(shí)候,會(huì)指定一個(gè)回滾段,在事務(wù)進(jìn)行的過程中,當(dāng)數(shù)據(jù)被修改時(shí),原始的數(shù)據(jù)會(huì)被復(fù)制到回滾段。
4。在回滾段中,事務(wù)會(huì)不斷填充盤區(qū),直到事務(wù)結(jié)束或所有的空間被用完,如果當(dāng)前的盤區(qū)不夠用,事務(wù)會(huì)在段中請求擴(kuò)展下一個(gè)盤
區(qū),如果所有已分配的盤區(qū)都被用完,事務(wù)會(huì)覆蓋最初的盤區(qū)或者在回滾段允許的情況下擴(kuò)展新的盤區(qū)來使用.
5?;貪L段存在于undo表空間中,在數(shù)據(jù)庫中可以存在多個(gè)undo表空間,但同一時(shí)刻只能使用一個(gè)undo表空間。
四.回滾段中的數(shù)據(jù)類型:
回滾段中的數(shù)據(jù)主要分為以下三種:
1.Uncommitted undo information; 未提交的回滾數(shù)據(jù),該數(shù)據(jù)所關(guān)聯(lián)的事務(wù)并未提交,用于實(shí)現(xiàn)讀一致性,所以該數(shù)據(jù)不能被其它
事務(wù)的數(shù)據(jù)所覆蓋
2.Committed undo information;已經(jīng)提交但未過期的回滾數(shù)據(jù),該數(shù)據(jù)關(guān)聯(lián)的事務(wù)已經(jīng)提交,但是仍受到undo retention參數(shù)保持時(shí)
間的影響
3.Expired undo information;事務(wù)已經(jīng)提交,而且數(shù)據(jù)保存時(shí)間已經(jīng)超過undo retention參數(shù)指定的時(shí)間,屬于已經(jīng)過期的數(shù)據(jù)
當(dāng)回滾段滿了后,會(huì)優(yōu)先覆蓋Expired undo information,當(dāng)過期數(shù)據(jù)空間用完后,會(huì)再覆蓋Committed undo information的區(qū)域,
這時(shí)undo retention參數(shù)所規(guī)定的保持時(shí)間會(huì)被破壞,Uncommitted undo information的數(shù)據(jù)是不允許覆蓋的,如果要求提交的數(shù)據(jù)
在undo retention參數(shù)規(guī)定的時(shí)間內(nèi)不會(huì)被覆蓋,可以在undo表空間上指定RETENTION GUARANTEE,語法如下:
ALTER TABLESPACE UNDOTBS1 RETENTION GUARANTEE;
五。undo數(shù)據(jù)與redo數(shù)據(jù)的區(qū)別:
redo--> undo-->datafile
insert一條記錄時(shí), 表跟undo的信息都會(huì)放進(jìn) redo 中, 在commit 或之前, redo 的信息會(huì)放進(jìn)硬盤上. 故障時(shí), redo 便可恢復(fù)那些
已經(jīng)commit 了的數(shù)據(jù).
redo->每次操作都先記錄到redo日志中,當(dāng)出現(xiàn)實(shí)例故障(像斷電),導(dǎo)致數(shù)據(jù)未能更新到數(shù)據(jù)文件,則數(shù)據(jù)庫重啟時(shí)須redo,重新
把數(shù)據(jù)更新到數(shù)據(jù)文件
undo->記錄更改前的一份copy,但你系統(tǒng)rollback時(shí),把這份copy重新覆蓋到原來的數(shù)據(jù)
redo->記錄所有操作,用于恢復(fù)(redo records all the database transaction used for recovery)
undo->記錄所有的前印象,用于回滾(undo is used to store uncommited data infor used for rollback)
redo->已遞交的事務(wù),實(shí)例恢復(fù)時(shí)要寫到數(shù)據(jù)文件去的
undo->未遞交的事務(wù).
redo的原因是:每次commit時(shí),將數(shù)據(jù)的修改立即寫到online redo中,但是并不一定同時(shí)將該數(shù)據(jù)的修改寫到數(shù)據(jù)文件中。因?yàn)樵摂?shù)
據(jù)已經(jīng)提交,但是只存在聯(lián)機(jī)日志文件中,所以在恢復(fù)時(shí)需要將數(shù)據(jù)從聯(lián)機(jī)日志文件中找出來,重新應(yīng)用一下,使已經(jīng)更改數(shù)據(jù)在數(shù)
據(jù)文件中也改過來!
undo的原因是:在oracle正常運(yùn)行時(shí),為了提高效率,假如用戶還沒有commit,但是空閑內(nèi)存不多時(shí),會(huì)由DBWR進(jìn)程將臟塊寫入到數(shù)據(jù)
文件中,以便騰出寶貴的內(nèi)存供其它進(jìn)程使用。這就是需要UNDO的原因。因?yàn)檫€沒有發(fā)出commit語句,但是oracle的dbwr進(jìn)程已經(jīng)將
沒有提交的數(shù)據(jù)寫到數(shù)據(jù)文件中去了。
undo 也是datafile, 可能dirty buffer 沒有寫回到磁盤里面去。
只有先redo apply 成功了,才能保證undo datafile 里面的東西都是正確的,然后才能rollback
做undo的目的是使系統(tǒng)恢復(fù)到系統(tǒng)崩潰前(關(guān)機(jī)前)的狀態(tài),再進(jìn)行redo是保證系統(tǒng)的一致性.
不做undo,系統(tǒng)就不會(huì)知道之前的狀態(tài),redo就無從談起
六.與undo有關(guān)的相關(guān)參數(shù)
undo_management = auto 自動(dòng)的undo表空間管理
undo_tablespace = undotbs1 設(shè)置undo表空間的名稱,可以存在多個(gè)undo表空間,但同時(shí)只能使用一個(gè)
undo_retention = 900(秒) 設(shè)置快照保存的最少時(shí)間,設(shè)置后在此時(shí)間段內(nèi)仍有可能會(huì)被覆蓋
ALTER TABLESPACE UNDO_TS RETENTION GUARANTEE; 強(qiáng)制所有快照必須保存 undo_retention所規(guī)定的時(shí)間。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。