undo

来源:互联网 发布:淘宝图片不清楚 编辑:程序博客网 时间:2024/05/17 07:39
数据修改后会生成undo信息,一开始存在内存中,如遇到检查点,或内存写满,就会刷入磁盘

undo tablespace 中数据存在4种

active:活动的 上例中 该undo事务还未提交时候 已经写入disk
inactive:不活动(未过undo_retention)
expired:undo blk  inactive时间已经超过undo_retention设置(只是个建议参数)
free:空闲
使用时候先用free的,再用expired的,还不够用inactive的 还不够的话 若开了自动扩展 则自动扩展 没开 报错 空间不足



二、撤销段中的内容及相关特性

    对于任何DML操作而言,必须同时处理数据块和撤销块,并且还会生成重做信息

    ACID中,ACI要求生成撤销,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  手动管理(仅保留)

0 0
原创粉丝点击