Oracle 10g的UNDO_RETENTION管理增强

Oracle 10g的UNDO_RETENTION管理增强: 在AUM模式下,UNDO_RETENTION参数用以控制事务提交以后Undo保留的时间。该参数以秒为单位,9iR1初始值为900秒,在Oracle 9iR2增加为10800秒。但是这是一个NO Guaranteed的限制。也就是说,如果有其他事务需要回滚空间,而空间出现不足时,这些信息仍然会被覆盖。 从Oracle 10g开始,如果设置UNDO_RETENTION为0,那么Oracle启动自动调整以满足最长运行查询的需要。当然如果空间不足,那么Oracle满足最大允许的长时间查询。而不再需要用户调整。当设置undo_retent[......]

阅读全文

回滚段的前世今生

回滚段的前世今生: 在Oracle 9i之前,回滚表空间创建之后,Oracle随后创建回滚段供数据库使用,也可以手工创建或者删除回滚段进行维护,比如在开始事务之前,可以通过如下命令指定使用特定的回滚段: set transaction user rollback segment <rollback_segment_name>; 可以从数据库中查询这些回滚段的状态: sys@TQGZS> select segment_name,tablespace_name,status from dba_rollback_segs;SEGMENT_NAME  &n[......]

阅读全文

并发控制和一致性读

并发控制和一致性读: 允许多用户并发访问是数据库必须满足的功能,那么怎样实现并发访问、控制、数据修改就成了一个重要问题。一方面Oracle通过锁定机制实现数据库的并发控制,另一方面通过多版本(Multi-versioning Model)模型来进行并发数据访问。 通过多版本架构,Oracle实现了读取和写入的分离,使得写入不阻塞读取;读取不阻塞修改。这是Oracle数据库区别于其他数据库的一个重要特征。多版本模型在Oracle数据库中是通过一致性读来实现的,一致性读也正是回滚表空间的主要作用之一。 Oracle一方面不允许其他用户读取未提交数据,另一方面要保证用户读取的数据来自同一时间点[......]

阅读全文

回滚段存储的内容

回滚段存储的内容: 前面的日志中讲过,Redo中只会记录少量信息,这些信息足以重演事务;同样Undo中也只记录精简信息,这些信息足以撤销事务。 对于insert操作,回滚段只需要记录插入记录的rowid,如果回退,只需将该记录根据rowid删除即可;对于update操作,回滚段只需要记录被更新字段的旧值即可(前镜像),回退时通过旧值覆盖新值即可完成回滚;对于delete操作,Oracle则必须记录整行的数据,在回滚时,Oracle通过一个反向操作恢复删除的数据。 通过以上介绍可以简单总结一下:对于相同数据量的数据操作,通常insert产生最少的Undo,update产生的Undo居中,[......]

阅读全文

什么是回滚和撤销

什么是回滚和撤销: 首先来介绍一下什么是回滚和撤销。我们知道,从Oracle 6版本到Oracle 9i版本,Oracle用数据库中的回滚段(Rollback)来提供撤销数据(Undo Data);而从Oracle 9i开始,Oracle还提供了一种新的撤销数据(Undo Data)管理方式,就是使用Oracle自动管理的撤销(Undo)表空间(Automatic Undo Management,通常被缩写为AUM)。 事务使用回滚段来记录变化前的数据或者撤销信息,假定发出了一个更新语句: update emp set sal=4000 where empno=7788; 下面看一下这[......]

阅读全文