并发控制和一致性读

Posted by dbtan on 十二月 23rd, 2009

并发控制和一致性读:

允许多用户并发访问是数据库必须满足的功能,那么怎样实现并发访问、控制、数据修改就成了一个重要问题。一方面Oracle通过锁定机制实现数据库的并发控制,另一方面通过多版本(Multi-versioning Model)模型来进行并发数据访问

通过多版本架构,Oracle实现了读取和写入的分离,使得写入不阻塞读取;读取不阻塞修改。这是Oracle数据库区别于其他数据库的一个重要特征。多版本模型在Oracle数据库中是通过一致性读来实现的,一致性读也正是回滚表空间的主要作用之一

Oracle一方面不允许其他用户读取未提交数据,另一方面要保证用户读取的数据来自同一时间点。下面通过下图来
... ...
<阅读全文>

回滚段存储的内容

Posted by dbtan on 十二月 23rd, 2009

回滚段存储的内容:

前面的日志中讲过,Redo中只会记录少量信息,这些信息足以重演事务;同样Undo中也只记录精简信息,这些信息足以撤销事务。

对于insert操作,回滚段只需要记录插入记录的rowid,如果回退,只需将该记录根据rowid删除即可;
对于update操作,回滚段只需要记录被更新字段的旧值即可(前镜像),回退时通过旧值覆盖新值即可完成回滚;
对于delete操作,Oracle则必须记录整行的数据,在回滚时,Oracle通过一个反向操作恢复删除的数据。

通过以上介绍可以简单总结一下:对于相同数据量的
... ...
<阅读全文>

什么是回滚和撤销

Posted by dbtan on 十二月 23rd, 2009

什么是回滚和撤销:

首先来介绍一下什么是回滚和撤销。我们知道,从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;

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

⑴ 检查empno=7788记录在Buffer
... ...
<阅读全文>

回滚与撤销

Posted by dbtan on 十二月 23rd, 2009

回滚与撤销:

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

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

我们会在后续的日志中介绍回滚(Rollback)与撤销(Undo)方面的知识。

- The End - <阅读全文>

Redo故障的恢复

Posted by dbtan on 十二月 20th, 2009

Redo故障的恢复:

我们已经知道日志文件对于数据库来说非常重要,在实际使用过程中,可以会遇到各种各样的问题,接下来将介绍一些在日常数据库维护中经常会遇到的情况。

1. 丢失非活动日志组的故障恢复:
如果数据库丢失的是非活动(INACTIVE)日志组,由于非活动日志组已经完成检查点,数据库不会发生数据损失,此时只需要通过Clear重建该日志组即可恢复。
⑴ 首先删除一个非活动日志组,模拟一次故障损失:

sys@TQGZS> ! mv /u01/oracle/oradata/tqgzs/redo02.log /u01/oracle/databak/

⑵ 如果数据库日志切换,使用
... ...
<阅读全文>


Copyright © 2010 http://www.dbtan.com. All rights reserved.