oracle事务提交写日志过程,Oracle 中redo log和undo log

transaction:事务

一个事务会在数据库中申请资源来完成任务,事务或复杂或简单,最后都只有两个结果,事务成功或者失败,成功需要保存事务更改,失败需要恢复到事务前的状态

redo log:重做日志

在操作一条数据之前需要记录redo log,然后再修改数据,以便在数据库出现问题的时候通过redo log恢复已经提交的数据。redo log是为了重现已经做过的操作

undo log:撤销日志

为了保证读一致性,在更新数据到提交之前,Oracle会先把旧数据写入到undo log中,以便回滚,且其他用户读取的数据也是和undo log中的数据一致,直到提交事务才更改数据,undo log是为了撤销所作更改。数据放在undo表空间中

不管是redo log和undo log都是记录在内存中的,只要断电数据就会丢失,一般数据库会有相应机制把内存数据写道磁盘上,比如几秒钟写一次,数据文件大于1M写一次,需要注意的是Oracle会先写redo log,因为redo log记录了整个事务完整的操作轨迹,可以用来做数据恢复

对于Oracle的基本操作,都会写相关的日志,以便做数据恢复。对于undo来说,undo log是写到undo表空间中,事务没提交以前,这些undo segment是active的,不能被别的undo数据覆盖,事务提交以后才能被别的undo覆盖,所以如果执行一个很大的更新或者删除事务,就会造成undo不够用,一个解决办法是加大undo表空间,还有一个办法就是把大事务拆分成小事务,比如分批提交。

Oracle分批提交DML

假设有两个表test1和test2,两个表都有一个ID字段(Primary Key),test1和test2都还有一个字段cname

ca039d5028eb

上图中是把需要更新的数据放到游标中一行一行更新,通过计数器实现更新10000行提交一次,但是这种写法pl/sql引擎会频繁与数据库交互,update一次交互一次,下面这种方法能较少交互次数,提高效率(对于插入操作效率提升更明显)。

ca039d5028eb

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值