undo与redo的运行机制

王朝mssql·作者佚名  2006-12-17
宽屏版  字体: |||超大  

undo与redo的运行机制

undo与redo的运行机制 撤消与重做(undo and redo)

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将该事务标记为已完成

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有