现在的位置: 首页 > 综合 > 正文

oracle commit

2013年07月25日 ⁄ 综合 ⁄ 共 1304字 ⁄ 字号 评论关闭

1、oracle commit 以后是否可以回滚,rollback 是否必须写在commit之前

分为几种不同情况。
1.没有提交(commit)的数据删除后无法rollback
2.提交(commit)了的数据删除后可以使用rollback恢复
3.删除数据后提交(commit)则无法使用rollback恢复

就是说,你提交了的数据是永久性的,rollback是在这个基础上进行备份的。

2、Oracle执行commit后到底做了什么?

     A、从databuffer中写数据给datafile;

    B、从log_buffer中写数据给redofile;

    C、同时发生一个checkpoint,在redo,datafile,Arcn(如有归档)中打上timestamp

   COMMIT是一个非常快的操作,当我们发布commit命令时,真正困难的动作已经完成,
在数据库中已经执行了数据更改,所以已经完成了99%的任务,例如:下列操作已经产生:

1)在SGA(Buffer Cache)中已经生成了undo块;
2)在SGA(Buffer Cache)中已经生成了产生改变的数据块和索引块;
3)在REDO LOG BUFFER生成了前面两项的redo信息;
4)依赖于前三项产生的数据量大小以及操作需要的时间,buffer中的数据可能已经
有一部分输出到了磁盘;
5)所有需要的锁已经获得;

当执行COMMIT命令时,只执行如下操作:

1)为事务生成SCN:SCN是ORACLE数据库的一种计时信息,用以保证事务的顺序性,
同时还用于失败恢复和保证数据库的读一致性和检查点,无论何时何人提交,SCN
自动加1;

2)将事务相关的未写入redo log file中的redo信息从redo log buffer写入到redo log
file,这才是真实的COMMIT,这步操作完成,说明我们已经完成COMMIT,事务从
V$TRANSACTION中移除;

3)V$LOCK中记录的SESSION关于该事务的锁会释放,其他需要这些锁的事务被唤醒;

4)执行块清理,清理块头保存的事务信息

3、COMMIT语句处理顺序

       当事务提交时,Oracle分配一个唯一的顺序号SCN(System Change Number)给事务。数据库恢复总是基于该SCN号来进行处理。SCN号是记录在控制文件、数据文件、块头及重做日志文件中。

COMMIT处理步骤:

Oracle 在下面情况提交事务:

l 发出一个COMMIT语句。

l 执行DDL语句时。

l 离开Oracle时。

Oracle处理COMMIT的顺序是:

1)服务器为每个COMMIT产生一个SCN。使改变永久化。

2)LGWR进程将日志缓冲区数据并带有SCN一起写到重做日志文件

3)服务器释放表级和行级锁。

4)用户被提示COMMIT完成。

5)服务器使事务已完成。

Oracle处理ROLLBACK的顺序是:

当下面情况发生时执行回滚:

l 发出ROLLBACK命令。

l 服务器进程放弃地终止

l 会话被DBA终止。

ROLLBACK 是对数据库的操作进行撤消,步骤有:

1)服务器进程不做任何的改变。

2)服务器释放表级和行级锁。

3) 服务器使事务已完成。

抱歉!评论已关闭.