二、撤销段中的内容及相关特性
对于任何DML操作而言,必须同时处理数据块和撤销块,并且还会生成重做信息
在ACID中,A、C、I要求生成撤销,D则要求生成重做
INSERT:
撤销段记录插入记录的rowid,如果需要撤销,则根据rowid将该记录删除即可
UPDATE:
撤销段记录被更新字段的原始值,撤销时将原始值覆盖新值即可
DELETE:
撤销段记录整行的数据,撤销时执行反向操作将该记录插入原表
由上可知,UNDO段中的内容总结如下:
数据为修改之前的副本
从每个改变数据的事务中获得
在事务结束前一直被保留
UNDO段中数据的作用:
用于回滚操作
读一致性和闪回查询
用于事务失败时的恢复
UNDO段与事务:
一个事物的启动,Oracle将为其分配仅仅一个UNDO段,若该段用完,则Oracle会自动为该UNDO段添加另一个区间(extent)
一个UNDO段能够同时为多个事务服务
UNDO段与UNDO表空间:
UNDO段中的内容存储在UNDO表空间
任意给定时刻只能使用一个UDNO表空间
UNDO表空间必须被创建为持久的、本地管理、可自动扩展的表空间
正在使用的UNDO表空间不能撤销或删除
UNDO表空间使用循环写的方式,与联机日志文件写相似,不同的是UNDO中可以设置了undo_retention 保留时间
UNDO段的两种管理方式:
AUTO 自动管理(推荐)
MANUAL 手动管理(仅保留)