redo和undo的區別

2021-07-04 13:06:08 字數 1196 閱讀 8118

redo--> undo-->datafile

insert一條記錄時, 表跟undo的資訊都會放進 redo 中, 在commit 或之前, redo 的資訊會放進硬碟上. 故障時, redo 便可恢復那些已經commit 了的資料.

redo->每次操作都先記錄到redo日誌中,當出現例項故障(像斷電),導致資料未能更新到資料檔案,則資料庫

重啟時須redo,重新把資料更新到資料檔案

undo->記錄更改前的乙份copy,但你系統rollback時,把這份copy重新覆蓋到原來的資料

redo->記錄所有操作,用於恢復(redo records all the database transaction used for recovery)

undo->記錄所有的前印象,用於回滾(undo is used to store uncommiteddata

infor used for rollback)

redo->已遞交的事務,例項恢復時要寫到資料檔案去的

undo->未遞交的事務.

redo的原因是:每次commit時,將資料的修改立即寫到online redo中,但是並不一定同時將該資料的修改寫到資料檔案中。因為該資料已經提交,但是只存在聯機日誌檔案中,所以在恢復時需要將資料從聯機日誌檔案中找出來,重新應用一下,使已經更改資料在資料檔案中也改過來!

undo的原因是:在oracle

語句對資料庫所做的修改。

·oracle服務程序釋放事務所使用的所有鎖

·oracle通知事務回退成功。

·oracle將該事務標記為已完成

舉個例子:

insert into a(id) values(1);(redo)

這條記錄是需要回滾的。

回滾的語句是delete from a where id = 1;(undo)

試想想看。如果沒有做insert into a(id) values(1);(redo)

那麼delete from a where id = 1;(undo)這句話就沒有意義了。

現在看下正確的恢復:

先insert into a(id) values(1);(redo)

然後delete from a where id = 1;(undo)

系統就回到了原先的狀態,沒有這條記錄了

redo和undo的區別

redo undo datafile insert一條記錄時,表跟undo的資訊都會放進 redo 中,在commit 或之前,redo 的資訊會放進硬碟上.故障時,redo 便可恢復那些已經commit 了的資料.redo 每次操作都先記錄到redo日誌中,當出現例項故障 像斷電 導致資料未能更新...

redo和undo的區別

redo undo datafile insert一條記錄時,表跟undo的資訊都會放進 redo 中,在commit 或之前,redo 的資訊會放進硬碟上.故障時,redo 便可恢復那些已經commit 了的資料.redo 每次操作都先記錄到redo日誌中,當出現例項故障 像斷電 導致資料未能更新...

redo和undo的區別

edo undo datafile insert一條記錄時,表跟undo的資訊都會放進 redo 中,在commit 或之前,redo 的資訊會放進硬碟上.故障時,redo 便可恢復那些已經commit 了的資料.redo 每次操作都先記錄到redo日誌中,當出現例項故障 像斷電 導致資料未能更新到...