OracleUndoRedo通俗理解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OracleUndoRedo通俗理解相关的知识,希望对你有一定的参考价值。
参考技术A什么是REDO
REDO记录transaction logs 分为online和archived 以恢复为目的
比如 机器停电 那么在重起之后需要online redo logs去恢复系统到失败点
比如 磁盘坏了 需要用archived redo logs和online redo logs区恢复数据
比如 truncate一个表或其他的操作 想恢复到之前的状态 同样也需要
什么是UNDO
REDO 是为了重新实现你的操作 而UNDO相反 是为了撤销你做的操作 比如你得一个TRANSACTION执行失败了或你自己后悔了 则需要用 ROLLBACK命令回退到操作之前 回滚是在逻辑层面实现而不是物理层面 因为在一个多用户系统中 数据结构 blocks等都在时时变化 比如我们 INSERT一个数据 表的空间不够 扩展了一个新的EXTENT 我们的数据保存在这新的EXTENT里 其它用户随后也在这EXTENT里插入了数据 而此时我想ROLLBACK 那么显然物理上讲这EXTENT撤销是不可能的 因为这么做会影响其他用户的操作 所以 ROLLBACK是逻辑上回滚 比如对INSERT来说 那么ROLLBACK就是DELETE了
MIT 以前 常想当然地认为 一个大的TRANSACTION(比如大批量地INSERT数据)的MIT会花费时间比短的TRANSACTION长 而事实上是没有什么区别的
因为ORACLE在MIT之前已经把该写的东西写到DISK中了
我们MIT只是
产生一个SCN给我们TRANSACTION SCN简单理解就是给TRANSACTION排队 以便恢复和保持一致性
REDO写REDO到DISK中(LGWR 这就是log file sync) 记录SCN在ONLINE REDO LOG 当这一步发生时 我们可以说事实上已经提交了 这个TRANSACTION已经结束(在V$TRANSACTION里消失了)
SESSION所拥有的LOCK(V$LOCK)被释放
Block Cleanout(这个问题是产生ORA : snapshot too old的根本原因) ROLLBACK ROLLBACK和MIT正好相反 ROLLBACK的时间和TRANSACTION的大小有直接关系 因为ROLLBACK必须物理上恢复数据 MIT之所以快 是因为ORACLE在MIT之前已经作了很多工作(产生UNDO 修改BLOCK REDO LATCH分配) ROLLBACK慢也是基于相同的原因
UNDO表空间用于存放UNDO数据 当执行DML操作时 Oracle <;会将这些操作的旧数据写入UNDO段 管理UNDO数据不仅可以使用回滚段 还可以使用UNDO表空间
UNDO数据的作用 当用户执行DML操作修改数据时 UNDO数据被存放在UNDO段 而新数据则被存放到数据段中 如果事务操作存在问题 就需要回退事务 以取消事物变化
例如 执行完UPDATE emp SET sal= WHERE empno= 后 发现应该修改雇员 的工资 而不是 此时应该执行ROLLBACK语句
读一致性
用户检索数据时 ORACLE总是使用户只能看到被提交过的数据 这是由Oracle自动提供的 当用户修改数据 但是没有提交时 另外一个用户使用select语句查找该值时 该值就是从undo表空间中取得的
事务恢复
事务恢复是例程恢复的一部分 它是由Oracle Server自动完成的 如果在数据库运行过程中出线历程失败 那么当启动Oracle Server时 后台进程SMON会自动执行例程恢复 执行例程恢复时 Oracle会重做所有未应用的记录 然后打开数据库 回退未提交事务
倒叙查询
倒叙查询用于取得某一特定时间点的数据库数据
UNDO_MANAGEMENT
使用初始化参数用于指定UNDO数据的管理方式 如果使用自动管理模式 必须设置该参数为AUTO 此时采用UNDO表空间管理UNDO数据 如果使用手工管理模式 必须设置该值为MANUAl 此时采用回滚段管理UNDO数据
UNDO_TABLESPACE
用于指定例程所要使用的UNDO表空间 使用自动UNDO管理模式时 通过配置该参数可以指定例程所要使用的UNDO表空间
使用RAC结构时 必须为每个例程配置一个独立的UNDO表空间
UNDO_RETENTION
该参数用于控制UNDO数据的最大保留时间 其默认值为 秒 该值时倒叙查询可以查看到的最早时间点
lishixinzhi/Article/program/Oracle/201311/17025
以上是关于OracleUndoRedo通俗理解的主要内容,如果未能解决你的问题,请参考以下文章