前滚和回滚

Oracle数据库是采用“日志在先”机制的。当我们对数据库数据进行修改时,并不是立即将修改数据写入到文件中,而是写入到共享内存SGA空间中的Buffer Cache里。同时,将修改的日志不断的写入到SGA中另一块Log Buffer缓存中。有一个后台进程LGWn不断的将Log Buffer缓存中的日志内容写入到online redo log文件中。

 

日志文件的几个特点:

首先,日志文件的写入是很频繁的。LGWn会不断将日志信息从Log Buffer中写入Online Redo Log;

其次,在日志文件上,可以有三个类型的事务事件:

1、事务结束,已经被commit,之后打过checkpoint检查点。这种事务记录在LogFile上,但是变化信息已经被DBWn写入进数据文件;

2、事务结束,已经被commit,之后没有打入checkpint检查点。这种情况下,LogFile已经写入了日志项目,数据文件可能包括脏数据,也可能没有写入脏数据;

3、事务未结束,没有commit。这种时候,数据块DirtyBlock上面是有事务槽信息,表示未结束事务,是不会将数据写入到数据文件中。但是,日志Log Buffer可能将部分未提交的DML操作项目写入到Log File中;

第三句有问题,可以看以下坛友解释

 

 

“前滚和回滚”是Oracle数据库实例发生意外崩溃,重新启动的时候,由SMON进行的自动恢复过程。

 

1、当实例失败后,SMON首先找到最后SCN记录的Redo Log File,寻找最后一个打入的Checkpoint

注:检查点Checkpoint

检查点Checkpoint是数据库一致性检查的一个标记。简单的说,就是在这个点上,Oracle保证各个文件(数据、控制、日志等)是一致的。检查点的作用就是在进行实例恢复的时候,告诉SMON进程,这个点之前的内容不需要进行恢复。

2Oracle会从这个checkpoint position处开始应用日志文件进行“前滚”来重演整个操作过程直到实例失败的那一刻

前滚,就是把已经写到redo上但是还没有写道到datafile上的变化通过读取redo来写到datafile上,不论是否提交。

3、打开数据库

4、对于没有进行提交的事物,ORACLE会从Undo表空间中寻找到旧版本SCN的数据块信息,来进行SGABuffer Cache数据块恢复。“回滚”未提交的事务。

MySQL中的事务是一组原子操作,这些操作要么全部完成,要么全部不完成。如果事务中的任何一个操作失败,则整个事务将被回滚到最初状态。 事务提交和回滚是MySQL中非常重要的操作,可以通过以下方式进行实现: 1. 事务提交:当事务中的一组操作全部成功执行后,可以通过执行COMMIT语句来提交事务,使得这些操作的结果永久保存在数据库中。 2. 事务回滚:当事务中的任何一个操作失败或者发生错误时,可以通过执行ROLLBACK语句来回滚事务,使得数据库恢复到事务开始之前的状态。 在MySQL中,可以通过以下方式进行事务操作: 1. 使用START TRANSACTION语句来开始一个新的事务。 2. 在事务中执行多个操作,例如INSERT、UPDATE、DELETE等。 3. 如果事务中的所有操作都成功执行,使用COMMIT语句来提交事务。 4. 如果事务中的任何一个操作失败或者发生错误,使用ROLLBACK语句来回滚事务。 例如,以下是一个MySQL事务的示例: ``` START TRANSACTION; INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com'); UPDATE accounts SET balance = balance - 100 WHERE user_id = 1; COMMIT; ``` 在上面的示例中,我们首先使用START TRANSACTION语句开始一个新的事务,然后在事务中执行了两个操作:向users表中插入一条新记录,以及更新accounts表中用户1的余额。最后,如果所有操作都成功执行,我们使用COMMIT语句提交事务。如果在执行这些操作的过程中发生了错误,我们可以使用ROLLBACK语句回滚事务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值