Oracle回滚(ROLLBACK)和撤销(UNDO)
Oracle回滚(ROLLBACK)和撤销(UNDO)--==================================--Oracle 回滚(ROLLBACK)和撤销(UNDO)--==================================一、回滚(ROLLBACK)和撤销(UNDO)回滚和前滚是保证Oracle数据库中的数据处于一致性状态的重要手段。在9i版本以前Oracle使用数据库中的回滚段来实现未提交数据或因系统故障导致实例崩溃时进行回滚操作每一个表空间需要创建回滚段,各个表空间对回滚段实现各自的管理在9i及后续版本提供了一种新的回滚数据的管理方式,即使用Oracle自动管理的撤销(Undo)表空间自动撤销管理表空间统一管理所有DML的回滚操作,简化了对于回滚工作的管理在9i,10g中的回滚段仅仅用作保留向后兼容撤销段代替了原有版本中的回滚段,因此本文所有描述均使用撤销撤销的实质意味着将所作的修改退回到修改前的状态,即倒退所有DML语句二、撤销段中的内容及相关特性对于任何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 手动管理(仅保留)三、与撤销相关的几个参数--查看本机中Oracle的版本SQL> SELECT * FROM v$version;BANNER----------------------------------------------------------------Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProdPL/SQL Release 10.2.0.1.0 - ProductionCORE 10.2.0.1.0 ProductionTNS for Linux: Version 10.2.0.1.0 - ProductionNLSRTL Version 10.2.0.1.0 - Production--查看和UNDO相关的参数SQL> SHOW PARAMETER undo;NAME TYPE VALUE------------------------------------ ----------- ------------------------------undo_management string MANUALundo_retention integer 900undo_tablespace string UNDOTBS1undo_management:设置数据库的撤销段是否使用自动管理模式,值可以为auto或manual,当为manual时将不使用撤销段,即不使用自动管理模式该参数为静态参数,修改后需重启实例才能生效undo_retention:指定撤销段数据在undo段中为非活动状态后被覆盖前保留的时间,单位为秒。在undo_management位auto时生效,为动态参数undo_tablespace:指定使用哪个表空间来实现数据的撤销,在undo_management位auto时生效,为动态参数retention guarantee子句:保证撤销保留,使用下面的操作来实现ALTER TABLESPACE undo_tablespace_name RETENTION GUARANTEE;--下面的查询中是当undo_management为manual时的结果集,可以看出撤销表空间的撤销段都处于offline状态SQL> SELECT segment_name,tablespace_name,status FROM dba_rollback_segs;SEGMENT_NAME TABLESPACE_NAME STATUS------------------------------ ------------------------------ ----------------SYSTEM SYSTEM ONLINE_SYSSMU1$ UNDOTBS1 OFFLINE_SYSSMU2$ UNDOTBS1 OFFLINE_SYSSMU3$ UNDOTBS1 OFFLINE_SYSSMU4$ UNDOTBS1 OFFLINE_SYSSMU5$ &上一个:分区表中的maxvalue参数设置
下一个:收缩undo表空间
- 更多Oracle疑问解答:
- 运行exp备份oracle数据库提示oracle-12154错误
- 有没有,生产Oracle Rman 备份脚本的工具啊!
- 初学orcle,希望有大大帮忙解说一下详细步骤,从登录oracle到创建表的过程
- oracle语句问题:一张user表,三个字段,id,name,time,插入记录比如:张三2007,李四2008,张三2011
- 如何写一个ORACLE触发器同步两个表中的数据?
- oracle 如何查看一个服务器上有多少个数据库.
- oracle 创建包的时候错误 求解
- oracle 重复列的问题
- oracle 中如何查处2星期前的数据
- 请教oracle数据库安装中的问题
- 请问谁能提供给我标准的oracle ERP的数据库表结构并详细说明各表主要的作用?
- 安装oracle遇到的问题 invalid entry CRC (expected 0x3e12e795 but got 0x9db0e9fd)
- 我的是ORACLE 10G,在RMAN中如何按指定的时间恢复数据文件啊?
- oracle为什么没有自动增长列
- oracle快捷键都有哪些啊?