溫馨提示×

溫馨提示×

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

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

undo與redo的區(qū)別

發(fā)布時(shí)間:2020-07-23 17:37:05 來源:網(wǎng)絡(luò) 閱讀:6480 作者:張君威 欄目:數(shù)據(jù)庫

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í)間。


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

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

AI