叮叮铛~今天我们推出Oracle异常恢复的第一个系列:“TRUNCATE TABLE恢复系列”,这个系列主要围绕truncate table实现的内部原理和几种恢复方式来展开。
深层剖析内部原理
众所周知,truncate table是一种快速清空表内数据的一种方式,与delete方式不同,truncate只产生非常少的redo和undo,就实现了清空表数据并降低表HWM的功能。我们通过10046和redo dump来分析truncate的整个操作过程,其中10046用于观察truncate对于字典基表的操作、redo dump用于观察truncate对于segment header以及L1、L2位图块的操作。
首先构造测试环境:OS: redhat 6.5,db:11.2.0.4,基于assm。
通过10046和redo dump去观察truncate操作:
从10046trace里搜出对基表的dml操作:
对基表的修改主要是:
- 修改obj$,tab$的dataobj#
- 修改seg$的对应信息如(extents,blocks,hwmincr等等)
- 删除tab_stats$对应对象的统计信息
对于segment header以及L1、L2位图块的操作,只能通过redo dump去观察,因为在logminer中只会记录数据块的变更,而对于segment h