oracle如何回滚数据,Oracle提交和回滚处理

1.Commit(提交)

作为一名开发人员,你应该深入了解COMMIT期间会做些什么。COMMIT通常是一个非常快的操作,而不论事务大小如何。

你可能认为,一个事务越大(换句话说,它影响的数据越多),COMMIT需要的时间就越长。不是这样的。不论事务有多大,COMMIT的响应时间一般都很“平”(flat,可以理解为无高低变化)。这是因为COMMIT并没有太多的工作去做,不过它所做的确实至关重要。

有些人认为限制事务的大小,一块一块地提交要比一次性提交要节省系统资源,其实 频繁的进行事务提交比一次性提交效率要低。我们已经知道,如果不使用绑定变量,而且频繁地完成硬解析,这会严重地降低并发性,原因是存在库缓存竞争和过量的CPU占用。即使转而使用绑定变量,如果过于频繁地软解析,也会带来大量的开销。COMMIT就是这样的一种操作(需要进行软解析),最好根据业务需求来确定事务的大小,而不是错误地为了减少数据库上的资源使用而“压缩”事务。

那么,为什么COMMIT的响应时间相当“平”,而不论事务大小呢?在数据库中执行COMMIT之前,困难的工作都已经做了。我们已经修改了数据库中的数据,所以99.9%的工作都已经完成。例如,已经发生了以下操作:

a. 已经在SGA中生成了undo块。

b. 已经在SGA中生成了已修改数据块。

c. 已经在SGA中生成了对于前两项的缓存redo。

d. 取决于前三项的大小,以及这些工作花费的时间,前面的每个数据(或某些数据)可能已经刷新输出到磁盘。(比如redo信息会每隔3S刷新输出一次)

e. 已经得到了所需的全部锁。

执行COMM

你可能感兴趣的:(oracle如何回滚数据)