error C202: 'FILE': undefined identifier :unexpected errorr C202: 'fp': undefined identifier



为了保证数据库中多个用户间的讀一致性和能够回退事务Oracle必须拥有一种机制,能够为变更的数据构造一种前镜像(before image)数据(保存修改之前的旧值)以保证那够回滚或撤销对数据库所作的修改,同时为数据恢复以及一致性读服务

这就是回滚(或撤销)。在之前的日志中已经提到Redo我们说Redo是用来保证在故障时事务可以被恢复,那么Undo则是用来保证事务可以被回滚或者撤销


首先来介绍一下什么是回滚和撤销。我们知道从Oracle 6版本到Oracle 9i版本,Oracle用數据库中的回滚段(Rollback)来提供撤销数据(Undo Data);而从Oracle 9i开始Oracle还提供了一种新的撤销数据(Undo Data)管理方式,就是使用Oracle自动管理的撤销(Undo)表空间(Automatic Undo

事务使用回滚段来记录变化前的数据或者撤销信息假定发出了一个更新语句:

下面看一下这个语句是怎样执行的(为了叙述方便,这裏尽量简化了情况):

⑵ 在回滚表空间的相应回滚段事务表上分配事务槽这个操作需要记录Redo信息;
⑸ 当用户提交时,会在Redo Log Buffer记录提交信息并在回滚段标记事务为非激活(INACTIVE)。

在以上事务处理过程中注意Redo和Undo是交替出现的,这两者对于数据库来说都非常重要在以上步骤中,对于回滚段的操作存在多处在事务开始时,首先需要在回滚表空间获得一个事务槽分配空间,然后创建前镜像此后事务的修改才能进行,Oracle必须以此来保证事务是可以回滚的

如果用户提交(commit)了事务,Oracle会在日志文件记录提交并且写出日志,同时会在回滚段中把该倳务标记为已提交提交事务在回滚段事务表的状态为INACTIVE,然后该事务所使用的回滚空间可以被重用回滚段空间是循环使用的;如果用户囙滚(Rollback)事务,则Oracle需要从回滚段中把前镜像数据读取出来修改数据缓冲区,完成回滚这个过程本身也要产生Redo,所以回退这个操作是很昂贵的

我要回帖

更多关于 identifier 的文章

 

随机推荐