寫的次序:

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 uncommited data infor used for rollback) redo->已遞交的事務,實例恢復時要寫到數據文件去的 undo->未遞交的事務. redo的原因是:每次commit時,將數據的修改立即寫到online redo中,但是並不一定同時將該數據的修改寫到數據文件中。因為該數據已經提交,但是只存在聯機日志文件中,所以在恢復時需要將數據從聯機日志文件中找出來,重新應用一下,使已經更改數據在數據文件中也改過來!

undo的原因是:在oracle正常運行時,為了提高效率,加入用戶還沒有commit,但是空閑內存不多時,會由DBWR進程將臟塊寫入到數據文件中,以便騰出寶貴的內存供其它進程使用。這就是需要UNDO的原因。因為還沒有發出commit語句,但是oracle的dbwr進程已經將沒有提交的數據寫到數據文件中去了。 undo 也是也是datafile, 可能dirty buffer 沒有寫回到磁盤里面去。只有先redo apply 成功了,才能保證undo datafile 里面的東西都是正確的,然后才能rollback 做undo的目的是使系統恢復到系統崩潰前(關機前)的狀態,再進行redo是保證系統的一致性. 不做undo,系統就不會知道之前的狀態,redo就無從談起 所以instance crash recovery 的時候總是先rollforward, 再rollback undo 回退段中的數據是以“回退條目”方式存儲。回退條目=塊信息(在事務中發生改動的塊的編號)+在事務提交前存儲在塊中的數據 在每一個回退段中oracle都為其維護一張“事務表” 在事務表中記錄着與該回退段中所有回退條目相關的事務編號(事務SCN&回退條目) redo 重做記錄由一組“變更向量”組成。每個變更變量中記錄了事務對數據庫中某個塊所做的修改。

當用戶提交一條commit語句時,LGWR進程會立刻將一條提交記錄寫入到重做日志文件中,然后再開始寫入與該事務相關的重做信息。 #事務提交成功后,Oracle將為該事備生成一個系統變更碼(SCN)。事務的SCN將同時記錄在它的提交記錄和重做記錄中。

commit 提交事務前完成的工作:

·在SGA區的回退緩存中生成該事務的回退條目。在回退條目中保存有該事務所修改的數據的原始版本。

·在SGA區的重做日志緩存中生成該事務的重做記錄。重做記錄中記載了該事務對數據塊所進行的修改,並且還記載了對回退段中的數據塊所進行的修改。緩存中的重做記錄有可能在事務提交之前就寫入硬盤中。

·在SGA區的數據庫緩豐中記錄了事務對數據庫所進行的修改。這些修改也有可能在事務提交之前就寫入硬盤中。

提交事務時完成的工作:

·在為該事務指定的回退段中的內部事務表內記錄下這個事務已經被提交,並且生成一個惟一的SCN記錄在內部事務表中,用於惟一標識這個事務。

·LGWR后進進程將SGA區重做日志緩存中的重做記錄寫入聯機重做日志文件。在寫入重做日志的同時還將寫入該事務的SCN。

·Oracle服務進程釋放事務所使用的所有記錄鎖與表鎖。

·Oracle通知用戶事務提交完成。

·Oracle將該事務標記為已完成。

rollback 回退事務完成的工作:

·Oracle通過使用回退段中的回退條目,撤銷事務中所有SQL語句對數據庫所做的修改。

·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) 系統就回到了原先的狀態,沒有這條記錄了。

oracle的redo和undo,Oracle的redo 和undo的區別相关推荐

  1. Oracle中的 IN, NOT IN和 EXISTS, NOT EXISTS的區別

    Oracle中的 IN, NOT IN和 EXISTS, NOT EXISTS的區別 通常聽到的都是說盡量用exists不要用in,因為exists只判斷存在而in需要對比值,所以exists比較快, ...

  2. oracle安装 redo log file,Oracle Dump Redo Log File 说明

    关于Dump redo log 的示例,MOS 上的文档:[ID 1031381.6] 有详细说明.Dump 有两种方式:(1)使用 一. dump redo 说明 关于Dump redo log 的 ...

  3. oracle ora 00283,【案例】Oracle报错ORA-16433非归档丢失redo无法启动的恢复过程

    天萃荷净 Oracle研究中心案例分析:运维DBA反映Oracle数据库处理非归档模式,redo文件损坏常规修复无法正常open数据库. 本站文章除注明转载外,均为本站原创: 转载自love wife ...

  4. oracle电梯案例,Oracle技术嘉年华的一个案例,redo的那些事,连载一

    电梯 Oracle技术嘉年华的一个案例,redo的那些事,连载三 在刚刚结束的Oracle技术嘉年华大会上,eygle大师的演讲中提到了有关于数据安全的一个案例,大致的意思是数据库管理员修改了自己账户 ...

  5. oracle rac redo log,RAC共享online redo log和archived log的官方说明

    理解redo共享了和redo单个sequence里面的scn不连续,就会明白为什么RAC到RAC的恢复或RAC到单机的恢复,一般都是recover到某个thread的某个scn或sequnce就可以了 ...

  6. oracle 12c undo,Oracle 12C新特性-临时UNDO段(Temporary Undo Segments) | 信春哥,系统稳,闭眼上线不回滚!...

    在12C版本,为了减少UNDO表空间的使用率及减少REDO和归档日志的产生量,ORACLE推出了临时UNDO段(Temporary Undo Segments)新特性.这个新特性把临时表产生的UNDO ...

  7. mysql数据库undo日志恢复_MySQL的undo/redo日志和binlog日志,以及2PC

    发现自己的知识点有点散,今天就把它们连接起来,好好总结一下. 一.undo log.redo log.binlog的定义和对比 定义和作用 所在架构层级 日志形式 所在文件和默认名称,组织结构 是否缓 ...

  8. oracle 添加undo,oracle undo

    < Oracle 的核心与技术 > 这本书说过,Oracle事务管理起源于Undo. Oracle的默认事务隔离级别是read commit.但是这个级别与MySQL的 read comm ...

  9. oracle 12c undo,Oracle 12c 新特性之临时Undo--temp_undo_enabled

    Oracle 12c 新特性之临时Undo--temp_undo_enabled 每个 Oracle 数据库包含一组与系统相关的表空间,例如 SYSTEM , SYSAUX , UNDO&TE ...

  10. 在UE4中实现撤销(Undo)和重做(Redo)功能

    一般编辑功能都有撤销和重做,如下图是VS的编辑菜单下的撤销/重做功能,UE4编辑器的Edit菜单下也有Undo和Redo功能 如果要在游戏中实现撤销/重做就要自己写代码实现了,比如撤销/重做Actor ...

最新文章

  1. C#磁盘遍历——递归
  2. Java实现各种排序算法
  3. 【C语言简单说】四:常量
  4. 重新设计Hamcrest
  5. python excel centos_centos中使用python遇到的几个问题
  6. leetcode -- medium part
  7. python json dumps 自定义_Python json.dumps()用法及代码示例
  8. 工业交换机芯片选择需要注意什么事项呢?
  9. HTML+CSS导航栏及下拉菜单的实现
  10. 第七章---8253和8255芯片
  11. GITEE提交代码时出现“文本是相同的,但文件不匹配“问题解决方法
  12. 星星之火-10:移动通信中的用户标识大汇总以及在手机呼叫流程中的使用--MSISDN,MSRN,IMSI,TMSI,PCI, CGI
  13. 邮箱 POP3服务器(端口110) SMTP服务器(端口25)
  14. python字符串类型判断(python中datatype()测试字符串类型)
  15. Word中加载Mathtype
  16. 通过jsp向mysql批量导入数据_通过JSP+JavaBean对mysql进行添加数据的操作
  17. uni-app+iconfont 实现星级评分(vue)
  18. SPSS数据类型学习
  19. ubuntu20.04 server 无图形命令行安装
  20. 网络教育统考计算机计算总和,【重要】2018年教育部统考办1号文件,全国网络教育本科统考大变革...

热门文章

  1. 如何避免数据治理过程的误区
  2. 大数据需留意的六个安全问题
  3. 大数据是如何改变制造业
  4. linux卸载kong,Ubuntu 源码安装Kong
  5. dwz怎么使用数据加载中提示_SOLIDWORKS在使用中提示内存不足怎么办?
  6. python hadoop_让python在hadoop上跑起来
  7. Spark读取本地文件和HDFS文件
  8. 适合于小团队且周期短的产品迭代的APP测试流程
  9. 如何在思科虚拟PC机信息进行修改
  10. Spring组合注解和元注解