Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645
撤销表空间,通常也称为UNDO表空间;UNDO表空间中的段也称为撤销段或UNDO段;撤销段中存放的数据就是“撤销信息”,这些“撤销信息”也称为撤销数据或UNDO数据。
撤销段是最直接管理“撤销信息”的逻辑层,下面将对撤销段的几种作用进行讲解和分析。
使读写一致
在不同的进程或用户模式下检索数据时,Oracle只能给用户提供被提交的数据,这样可以确保数据的一致性。
例如,在SCOTT模式下,执行了UPDATE emp SET sal=5500 WHERE empno=7788语句,这样旧的数据记录会被存放到UNDO段中,
而新数据则会存放到emp段,假定此时该数据尚未提交(比如没有执行commit命令,也没有退出SQL*Plus环境);然后用户在SYSTEM模式下执行SELECT Sal FROMscott.empWHERE empno=7788语句,此时用户将取得“旧的工资数据”,而不是新数据5500,而该数据正是从UNDO段中读取的
可以回滚事务
当执行修改(UPDATE)数据操作时,旧的数据(即UNDO数据)被存放到UNDO段,而新的数据则被存放到数据段中。
如果在修改操作中事务提交出现错误,就需要回滚事务,从而取消数据的更改。
比如,当用户使用UPDATE语句修改某个员工的工资时,由于误操作,而导致修改了全公司员工的工资(比如没有使用where条件语句)。
这样,用户就可以通过执行ROLLBACK语句来取消事务修改。
当执行ROLLBACK语句时,Oracle会将UNDO段的UNDO数据(即旧的员工工资)全部写回到数据段中。
事务恢复
事务恢复是例程恢复的一部分,它是由Oracle服务器自动完成的:如果在数据库运行过程中出现例程失败(如断电、内存故障等),
那么当重启Oracle 服务器时,后台进程SMON会自动执行例程恢复。执行例程恢复时,Oracle会重新处理所有未提交的数据记录,回滚未提交事务。
闪回操作
Oracle 11g新增了强大的闪回功能,其中,很多闪回技术都是基于UNDO段实现的,比如闪回表、闪回事务查询、闪回版本查询等。