易截截图软件、单文件、免安装、纯绿色、仅160KB

oracle 的redo和undo

来自http://www.inthirties.com/thread-239-1-1.html
 在这里会介绍UNDO,REDO是如何产生的,对TRANSACTIONS的影响,以及他们之间如何协同工作的。 
什么是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慢也是基于相同的原因。 
ROLLBACK会 
1,恢复数据,DELETE的就重新INSERT,INSERT的就重新DELETE,UPDATE的就再UP


相关文档:

Oracle创建表空间、创建用户以及授权、查看权限

  
 创建临时表空间
创建临时表空间
CREATE TEMPORARY TABLESPACE test_temp
TEMPFILE 'C:\oracle\product\10.1.0\oradata\orcl\test_temp01.dbf'
SIZE 32M
AUTOEXTEND ON
NEXT 32M MAXSIZE 2048M
EXTENT MANAGEMENT LOCAL;
创建用户表空间
创建用户表空间
CREATE TABLESPACE test_data
LOGGING ......

oracle 数据字典视图之 DICT / DICTIONARY

1.当你猛然间忘记通过什么视图可以查看procedure内容时,隐约记得所需的视图包含“SOUR”字段,此时查询dict/dictionary视图是最好的选择
sys@ora10g> col COMMENTS for a78
sys@ora10g>select * from dict where TABLE_NAME like '%SOUR%';
TABLE_NAME         ......

ORACLE常用数值函数、转换函数、字符串函数介绍

 
    本文并不准备介绍全部的oracle函数,当前情势下,俺也还没这个时间,需要学习的东西太多了,要把多数时间花在学习经常能用上的技术方面:),所以如果是准备深入了解所有oracle函数的朋友,还是去关注:Oracle SQL Reference官方文档更靠谱一些。
  本文更多将会介绍三思在日常中经常会用到的 ......

oracle中connect by prior实现递归查询

oracle中connect by prior实现递归查询
收集的几条在oracle中通过connect by prior来实现递归查询
Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。
创建示例表:
CREATE TABLE TBL_TEST
(
ID    NUMBER,
NAME VARCHAR2(100 BYTE),
PID   NUMBER    ......

Oracle管理与维护.手工创建数据库以及脚本

 Oracle管理与维护.手工创建数据库以及脚本
转自 草木瓜
一、前言
 说实话,早已厌倦了使用dbca的创建数据库,大概比较有点作用的是可以生成创建脚本罢。
《Oracle管理与维护.安装创建启动关闭数据库的常见问题(一)》(三、创建数据库)一文中有所提及。本文主要就是详述手
工使用脚本创建Oracle 10g数据库。 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号