第十三章:UNDO段

Posted ios9

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十三章:UNDO段相关的知识,希望对你有一定的参考价值。



一、UNDO

         UNDO 段是用于存储还原数据的特殊段,在发生实例故障的时候,UNDO 段用来对数 据进行恢复。本章内容包括介绍 UNDO 段的工作原理,并进行自动和手工的 UNDO 段的管理



1.1 UNDO 段的作用

      RDBMS(关系数据库管理系统)必须要提供一致性的数据,以确保不会丢失数据或导致数据混乱。例如,当用户去银行取款时,需要在用户储蓄账户上减去取款额,而在银行支出账户上增加取款额,以使得收支平衡。当使用关系数据库处理以上过程时,储蓄账户、支出账户分别对应于数据库表。当用户提款时,分别会在储户表、支出账户表上使用 UPDATE 语句执行增减款操作,最终提交事务,以确保收支平衡。

        大家设想一下,假设当在储蓄账户上减去取款额之后,因为机器断电导致数据库停止工作,怎么办?你可能会想这会导致收支不平衡,不会的,关系数据库通过事务(Transaction)实现了数据一致性。因为断电时事务尚未完成,所以将来在启动数据库时系统会自动回退未提交操作,并最终保证数据的一致性。从数据库的角度看,如果储蓄账户执行了 UPDATE 操作后出现断电,那么当重新启动数据库时系统会自动执行还原操作,将修改的数据恢复成原有数据。此时大家可能会问,那么原有数据存放在哪儿呢?当执行 INSERT、UPDATAE、 DELETE 等 DML 操作时,服务器进程会将原有数据(称为 UNDO 数据)存放到 UNDO 段中,UNDO 段是专门用于存储还原数据的段。

技术分享图片

         UNDO 数据也被称为回滚(ROLLBACK)数据,它用于确保数据的一致性。当执行 DML 操作(INSERT、UPDATE、DELETE 等)时,操作前的数据被称为 UNDO 记录。例如,当执行“UPDATE emp SETsal=1000WHERE empno=7788”语句时,假定雇员 7788 原有工资为 800,原有数据 800 就是 UNDO 数据,并且该数据会被存放到还原段中,而新数据 1000 则会存放到 EMP 数据段中。还原段用于在进程更改数据库中的数据时保存数据的旧值(可能还原的数据)。它按数据被修改之前的原样存储数据的位置及数据本身(如图 9-1 所示)。许多并发事务处理可以写入一个 UNDO 段。





























==============================================================

































以上是关于第十三章:UNDO段的主要内容,如果未能解决你的问题,请参考以下文章

Mysql事务—undo

Oracle(十三)闪回查询

Oracle11g温习-第十一章:管理undo

数据库事务系列3 undo

Oracle Undo回滚段深入解析_超越OCP精通Oracle视频课程培训15

undo表空间概述-1