Oracle redo undo commit rollback剖析
刚才在逛一个网友的博客的时候发现了一篇关于REDO、UNDO、COMMIT、ROLLBAKC的文章。虽然内容可能不是特别全面,可是还是总结的挺好的,转过来方便将来学习。
==================================================================================
redo--> undo-->datafile
insert一条记录时,表跟undo的信息都会放进 redo 中,在commit 或之前, redo 的信息会放进硬盘上。 故障时, redo 便可恢复那些已经commit 了的数据。
redo->
每次操作都先记录到redo日志中,当出现实例故障(像断电),导致数据未能更新到数据文件,则数据库重启时须redo,重新把数据更新到数据文件。
undo->
记录更改前的一份copy,但你系统rollback时,把这份copy重新覆盖到原来的数据
redo->记录所有操作,用于恢复(redo records all the database transaction used for recovery)
undo->记录所有的前印象,用于回滚(undo is used to store uncommited data infor used for rollback)
redo->已递交的事务,实例恢复时要写到数据文件去的
undo->未递交的事务.
redo的原因是:每次commit时,将数据的修改立即写到online redo中,但是并不一定同时将该数据的修改写到数据文件中。因为该数据已经提交,但是只存在联机日志文件中,所以在恢复时需要将数据从联机日志文件中找出来,重新应用一下,使已经更改数据在数据文件中也改过来!
undo的原因是:在oracle正常运行时,为了提高效率,加入用户还没有commit,但是空闲内存不多时,会由DBWR进程将脏块写入到数据文件中,以便腾出宝贵的内存供其它进程使用。这就是需要UNDO的原因。因为还没有发出commit语句,但是oracle的dbwr进程已经将没有提交的数据写到数据文件中去了。
undo 也是datafile,可能dirty buffer 没有写回到磁盘里面去。
只有先redo apply 成功了,才能保证undo datafile 里面的东西都是正确的,然后才能rollback 。
做redo的目的是使系统恢复到系统崩溃前(关机前)的状态,再进行undo是保证系统的一致性。
不做redo,系统就不会知道之前的状态,undo就无从谈起 。
所以instance crash recovery 的时候总是先rollforward,再rollback
undo
回退段中的数据是以“回退条目”方式存储。
回退条目=块信息(在事务中发生改动的块的编号)+在事务提交前存储在块中的数据
在每一个回退段中oracle都为其维护一张“事务表&rdquo
相关文档:
选择10g是因为对网格技术比较好奇,好像还没得到广泛应用,也就无所谓与前面版本有很大区别了。
在迅雷上下了个软件,运行sqlplusw,然后照着书,狂敲了一翻,有在网上下了个视频教程(MLDN魔乐科技_Oracle课堂),讲得挺好的,就是时间长了点,不如看书来得快。反正现在只是想熟悉一下基本语句。
看了两天书了。了解了一 ......
温故而知新,果然如此呀,第二次再翻开同样的内容果然有不同的收获,有些是第一次看的时候没有仔细理解的,还有些可能是在第一次看匆匆就跳过的,当然,可能还有部分是自己当时记住了完了又给忘记了。今天第二次看到子程序这一章节,发现了些新的内容,呵呵。在这里我就写下一些基本内容和容易忘记的,免得下次又给忘了。内 ......
预定义角色是oracle提供的角色,这些角色是在建立数据库,安装数据字典视图何PL/SQL包时建立的,并且每种角色都用于执行一些特定管理任务.
1,CONNECT角色
CONNECT角色时在建立数据库时,oracle执行脚本SQL.BSQ自动建立的角色,该角色具有应用开发人员所需的多数权限.CONNECT角色具有的所有系统权限如下:
ALTER SESS ......
权限(Privilege)是指执行特定类型SQL命令或访问其他方案对象的权利,权限包括系统权限和对象权限两种类型.系统权限(System Privilege)是指执行特定类型SQL命令的权利,它用于控制用户可以执行的一个或一组数据库操作.常用的系统权限:
CREATE SESSION 连接到数据库
CREATE TABLE 建表
CREATE VIEW 建立视图
CREATE PUBLI ......
oracle10g新特性:闪回恢复区(Flash recovery area)
Oracle9i开始提供闪回查询,以便能在需要的时候查到过去某个时刻的一致性数据,这是通过Undo实现的。这个功能有很大的限制,就是相关事务的undo不能被覆盖,否则就无力回天了。oracle10g大大的增强了闪回查询的功能,并且提供了将整个数据库回退到过去某个时刻的能力, ......