Welcome 微信登录

首页 / 数据库 / MySQL / 理解redo(11)truncate和select的redo

很多系统,在作删除操作时,都只是做一个标志位,并不会去做磁盘置0那样昂贵的操作。truncate也如是,更改的只是segment header和i-node表。truncate 会产生redo,是修改数据字典产生的,不是删除数据来的。truncate降低HWM,释放extent,重新生成data_object_id。之所以比delete快,是因为它根本不需要删除数据,redo只是记录这个操作本身而不会有大量数据的redo记录。因此,对于truncate操作,如果我们知道以前的data_object_id,并且空间未被重用,我们仍然可以找回数据。什么情况下select会产生redo ?1`)快速块清除或者叫commit clean out。事务提交的时候,Oracle针对内存里的块:a)把数据块ITL  ENTRY里flag的标记为Ub)设置commit scn在Scn/Fsc列有了这两个标记就可以告诉全世界这个事务已经提交。但ITL ENTRY 的Lck标志和每个数据行头的lb(锁定位信息)并不会清除。Oracle 做commit clean out并不会产生日志,这个你可能会感到比较奇怪,修改了块,但是却没产生日志。其实这个产生日志的过程在后面的完整的块清除的时候才做。也就是我们下一次select到这个数据块的时候。2)延迟块清除。事务提交的时候,事务修改的块已经不在内存里了,这个时候,Oracle不会再从磁盘把块读取到内存里做块清除,而是在下一次读取数据块的时候,做块清除的动作。这个块清除的动作会产生Redo。另外,因为存在递归等操作,若是对某个事务产生的redo进行会话级的丈量,可能有失偏颇,合理的是,基于实例级的测量:select name,value from v$sysstat where name="redo size";  理解redo(10)一个IMU的问题解释启动数据库报错,ORA-18008: cannot find OUTLN schema相关资讯      redo 
  • 大量redo生成的问题原因及改进  (09/06/2015 21:44:21)
  • Oracle 10g Standby Database 实时  (12/22/2014 18:34:35)
  • 普通表与临时表DML操作会产生REDO/  (09/17/2013 20:29:12)
  • online redo日志文件损坏恢复  (01/11/2015 08:36:34)
  • Redo丢失的4种情况及处理方法  (11/26/2014 11:12:28)
  • Oracle redo 日志调整  (06/07/2013 16:13:00)
本文评论 查看全部评论 (0)
表情: 姓名: 字数