前滚和回滚

2024-06-18 18:58
文章标签 回滚 前滚

本文主要是介绍前滚和回滚,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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数据块恢复。“回滚”未提交的事务。

这篇关于前滚和回滚的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1072837

相关文章

如何开启事务、确认提交事务、事务回滚、自动提交和禁止自动提交?

在数据库操作中,事务的开启、提交、回滚、自动提交和禁止自动提交是确保数据一致性和完整性的关键步骤。以下是这些操作的详细说明: 1. 开启事务 事务的开启方式通常取决于所使用的数据库访问技术或框架。以下是一些常见的情况: JDBC:在使用JDBC时,可以通过调用Connection对象的setAutoCommit(false)方法来禁用自动提交,从而开始一个新的事务。Spring框架:在Spr

nginx平滑升级与回滚

华子目录 升级实验环境准备测试内容准备实验要求实验步骤1.解压包2.检测1.26版本的环境3.make编译4.备份之前的`nginx`启动脚本5.将1.26中的nginx启动脚本覆盖掉1.24中的6.`kill -USR2 旧主进程pid`7.`kill -WINCH 旧主进程pid` 实验测试 回滚1.`kill -HUP 旧主进程pid`2.`kill -WINCH 新主进程pid`3.

@Transactional 注解使用场景详细说明包括(不生效的场景,事务回滚)

有意识的在涉及事务相关方法上加@Transactional注解,是个好习惯。不过,很多同学只是下意识地添加这个注解,一旦功能正常运行,很少有人会深入验证异常情况下事务是否能正确回滚。@Transactional 注解虽然用起来简单,但这货总是能在一些你意想不到的情况下失效,防不胜防! 我把这些事务问题归结成了三类:不必要、不生效、不回滚,接下用一些demo演示下各自的场景。 一:不必要 1、

Linux tty模式下无法使用回滚功能解决(shift+pgup方法不管用)

Linux tty模式下无法使用回滚功能解决(shift+pgup方法不管用) 自从内核5.9版本以后,回滚功能就被取消:fbcon: remove soft scrollback code 此前是可以使用 Shift + PageUp/PageDown 来滚动的。现在假如我们想查看屏幕以外的文字,应该如何查看? 1.使用less或more 例如 ls --help | less 之后我

@Transaction注解的理解以及手动回滚事务的2种方法

1、@Transaction注解的含义 在业务逻辑处理中,service层的某个方法使用注解@Transaction,代表统一开启事务,该业务操作具有原子性,要么一起提交,要么都不成成功。 2、什么情况下会手动回滚事务? a.业务方法中出现运行期异常,例如runtimeException, b.手动编程方式设置回滚:  TransactionAspectSupport.currentTra

asp net core中用efcore操作MySql数据库【包括事务回滚】

一、环境 开发环境:Win11,VisualStudio2022,MySQL Server 8.0,.Net Core7.0 测试 二、MySQL和EFCore相关的包 用NuGet包管理器安装 ​​​​​​​​​​​​​​ 三、数据库中设置 安装好MySQL数据库,做好基础设置,测试数据连接 用数据库管理软件登录: 四、创建数据库的表 本例只创建两个简单的表。 在创建

Git本地回滚重新修改代码再push到远程问题

引言    我们在开发的过程中,可能由于某些原因需要我们进行代码的回归到某个指定的版本,那么我们应该怎样操作才是正确的呢?下面先看看容易犯错的操作流程:    1.本地git reset --hard commit id回退到某个版本    2.回退版本后,未push到远程就修改了本地代码    3.修改完后再push到远程,提示先pull    4.问题是pull远程代码

误删表信息,回滚

误删数据回滚表 select * from 表名 as of timestamp to_timestamp('2020-10-18 17:00:00','YYYY-MM-DD HH24:MI:SS'); ALTER TABLE 表名 ENABLE ROW MOVEMENT; flashback table 表名 to timestamp to_timestamp('2020-10-28 15:0

Nginx平滑升级与回滚示例

Nginx 的平滑升级和平滑回滚是确保 Web 服务高可用性的重要组成部分。这两种操作允许你在不中断服务的情况下更新或回滚 Nginx 的版本。 Nginx 平滑升级与回滚 Nginx 的平滑升级和平滑回滚是确保 Web 服务高可用性的重要组成部分。这两种操作允许你在不中断服务的情况下更新或回滚 Nginx 的版本。本文将详细介绍如何进行平滑升级和平滑回滚。 1. Nginx 平滑升级

【nginx】详细详细超详细,包括编译安装nginx+升级+回滚+核心配置+高级配置+反向代理+Nginx Rewrite相关功能等等

理论部分: 企业高性能Web服务器Nginx是一个开源的、高性能的HTTP和反向代理服务器,同时也支持IMAP/POP3/SMTP协议。它由俄罗斯人Igor Sysoev开发,并在2004年以BSD-like协议发布。Nginx因其卓越的性能、稳定性、丰富的功能集以及简单的配置而广受企业欢迎。 在企业环境中,Nginx通常被用作高性能的Web服务器,用于托管网站和Web应用程序。它能够处理大量