OracleUndoRedo通俗理解Oracle认证考试

文章作者 100test 发表时间 2010:03:05 22:17:38
来源 100Test.Com百考试题网


  什么是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了。

  COMMIT 以前,常想当然地认为,一个大的TRANSACTION(比如大批量地INSERT数据)的COMMIT会花费时间比短的TRANSACTION长。而事实上是没有什么区别的,

  因为ORACLE在COMMIT之前已经把该写的东西写到DISK中了,

  我们COMMIT只是

  1,产生一个SCN给我们TRANSACTION,SCN简单理解就是给TRANSACTION排队,以便恢复和保持一致性。

  2,REDO写REDO到DISK中(LGWR,这就是log file sync),记录SCN在ONLINE REDO LOG,当这一步发生时,我们可以说事实上已经提交了,这个TRANSACTION已经结束(在V$TRANSACTION里消失了)

  3,SESSION所拥有的LOCK(V$LOCK)被释放。

  4,Block Cleanout(这个问题是产生ORA-01555: snapshot too old的根本原因) ROLLBACK ROLLBACK和COMMIT正好相反,ROLLBACK的时间和TRANSACTION的大小有直接关系。因为ROLLBACK必须物理上恢复数据。 COMMIT之所以快,是因为ORACLE在COMMIT之前已经作了很多工作(产生UNDO,修改BLOCK,REDO,LATCH分配), ROLLBACK慢也是基于相同的原因。

  1.


相关文章


Oracle数据库安全:PL_SQL的SQL注入Oracle认证考试
如何查看oracle表空间已使用大小Oracle认证考试
oracle连接标识符主机字符串Oracle认证考试
oracle的高水位线(HWM)Oracle认证考试
OracleUndoRedo通俗理解Oracle认证考试
Oracle与Tomcat端口冲突Oracle认证考试
ORACLE安装经验借鉴Oracle认证考试
查看锁住表的session并杀掉Oracle认证考试
ORACLE三表查询优化问题Oracle认证考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛