再上一篇:8.4不好的事务习惯
上一篇:8.6自治事务
主页
下一篇:9.1什么是 redo?
再下一篇:9.2什么是 undo?
文章列表

8.7小结

Oracle 9i 10g编程艺术:深入数据库体系结构

在这一章中,我们了解了Oracle事务管理的许多方面。事务是数据库区别于文件系统的主要特性之 一。要了解事务如何工作以及如何使用事务,在任何数据库中这对于正确地实现应用都是必要的。要知道, 在Oracle中,所有语句都具有原子性(包括副作用),而且要知道这种原子性延伸到了存储过程,这一点 很重要。我们看到,如果在PL/SQL块中放置一个WHEN OTHERS异常处理器,可能会显著地影响数据库中发 生的改变。作为数据库开发人员,要对事务如何工作有一个很好的了解,这至关重要。
我们介绍了完整性约束(惟一键、检查约束等)与Oracle中事务之间的交互,这种交互有些复杂。 我们讨论了Oracle通常在事务执行之后立即处理完整性约束,但是如果我们愿意,也可以把这个约束验证 延迟到事务结束时进行。实现复杂的多表更新时,如果所修改的表彼此相互依赖,这种延迟特性就非常重 要,级联更新就是这样一个例子。
如 果人们使用过其他数据库,这些数据库只是“支持”事务而没有“提升”事务的使用,就会沿袭 下来一个不好的事务习惯,接下来我们就考虑了这些坏习惯。在此介 绍了事务的根本原则:一方面,事务 应该尽可能短(也就是不应该不必要地建立大事务);另一方面,要根据需要是事务足够大。决定事务大小 的关键是数据完整 性,这是本章阐述的一个关键概念。能决定事务大小的惟一因素就是控制系统的业务规 则。记住,不是undo空间,不是锁,而是业务规则。
我们还介绍了分布式事务以及分布式事务与单个数据库事务有什么区别。另外分析了分布式事务中存 在的限制,并讨论了为什么会有这些限制。在建立分布式系统之前,你要了解这些限制,在单实例中能做 的事情到了分布式数据库中可能并不能做。
这一章的最后介绍的是自治事务,分析了自治事务是什么,更重要的是,指出了什么时候应该使用自 治事务,什么时候不该使用。我想再强调一遍,实际中自治事务的合理使用少之又少。如果发现你把它当 作一个特性在经常使用,可能就得花些时间好好看看为什么会这样。

第9 章 redo与undo

这一章将介绍Oracle数据库中最重要的两部分数据:redo与undo。redo(重做信息)是Oracle在 在线(或归档)重做日志文件中记录的信息,万一出现失败时可以利用这些数据来“重放”(或重做)事务 。 undo(撤销信息)是Oracle在undo段中记录的信息,用于取消或回滚事务。
在这一章中,我们讨论的内容很多,包括redo和undo(回滚信息)如何生成,以及事务、恢复等方 面如何应用 redo和 undo。首先我们给出一个高层概述,说明 undo和redo 分别是什么,它们如何协作。 然后向下细化,更深入地介绍各个主题,并讨论作为开发人员需要了解哪些内容。
这一章主要面向开发人员,在此没有涵盖应由 DBA完全负责确定和调整的问题。例如,如何找到 RECOVERY_PARALLELISM或FAST_START_MTTR_TARGET参数的最优设置?这个问题要由DBA确定,本章就没 有涉及。但是,redo和undo则是DBA和开发人员都关心的主题,它们是DBA和开发人员之间的桥梁。不 论是DBA还是开发人员,都需要对redo和undo的作用有很好的基本了解,知道它们如何工作,并且知道 如何避免与redo和undo的使用有关的潜在问题。如果掌握了redo和 undo的相关知识,这还有助于DBA 和开发人员更好地理解数据库一般如何操作。
在这一章中,我将针对Oracle的 这些机制提供伪代码,并从概念上解释到底会发生什么。这里不会 详尽地介绍所有内部细节,如会用哪些数据字节更新哪些文件等详细内容并不会谈到。具体发生的 情况可 能比我们介绍的更复杂,但是不管怎样,如果能很好地理解这些机制的工作流程,将很有意义,这有助于 理解你的动作会带来怎样的影响。