重做日志:每当有操作执行前,将数据真正更改时,先前相关操作写入重做日志。这样当断电,或者一些意外,导致后续任务无法完成时,系统恢复后,可以继续完成这些更改
撤消日志:当一些更改在执行一半时,发生意外,而无法完成,则可以根据撤消日志恢复到更改之前的壮态
有两个概念:前滚与回退
比如某一时刻数据库DOWN机了,有两个事务,一个事务已经提交,另一个事务正在处理。数据库重启的时候就要根据日志进行前滚及回退,把已提交事务的更改写到数据文件,未提交事务的更改恢复到事务开始前的状态。
redo和undo
redo->记录所有操作,用于恢复(redo records all the database transaction used for recovery)
undo->记录所有的前印象,用于回滚(undo is used to store uncommited data infor used for rollback)
redo->已递交的事务,实例恢复时要写到数据文件去的
undo->未递交的事务
redo的原因是:每次commit时,将数据的修改立即写到online redo中,但是并不一定同时将该数据的修改写到数据文件中。因为该数据已经提交,但是只存在联机日志文件中,所以在恢复时需要将数据从联机日志文件中找出来,重新应用一下,使已经更改数据在数据文件中也改过来。
undo的原因是:在oracle正常运行时,为了提高效率,假如用户还没有commit,但是空闲内存不多时,会由DBWR进程将脏块写入到数据文件中,以便腾出宝贵的内存供其它进程使用。这就是需要UNDO的原因。因为还没有发出commit语句,但是oracle的dbwr进程已经将没有提交的数据写到数据文件中去了。
write-ahead logging(WAL)预写式日志
预写式日志(WAL) 是一种实现事务日志的标准方法,很多主流的数据库都是用的这种方法。简言之,WAL 就是对硬盘上的数据文件(表和索引)的修改必须只能在这些修改已经记录了日志之后,即在这些新的日志记录到存储器(硬盘)之后。 这样的话我们就不需要在每次事务提交的时候都把数据页记录到磁盘。
这样的方法能使局部的顺序I/O(根据日志顺序地对各个表各个区域进行I/O)取代全局的随机I/O(大量并发的I/O不是针对同一区域同一表的)。因为我们知道在出现崩溃的情况下, 我们可以用日志来恢复数据库:任何尚未附加到数据页的记录都将先从日志记录中重做(这叫向前滚动恢复,也叫做 REDO)。
分享到:
相关推荐
标题《Segment-Based Recovery: Write-ahead logging revisited》表明本文是对传统写前日志(Write-Ahead Logging,WAL)技术的重新审视,尤其是针对分段恢复(Segment-Based Recovery)的应用。WAL是一种确保数据库...
"Python-WalEPostgres连续归档"是一种利用Python编写的工具,专门针对PostgreSQL的Write-Ahead Log (WAL)文件和基本备份进行持续归档,以实现高效、可靠的数据保护策略。 **Write-Ahead Log (WAL)** WAL是...
Explore HBase’s architecture, including the storage format, write-ahead log, and background processes Dive into advanced usage, such extended client and server options Learn cluster sizing, tuning, ...
在PostgreSQL中,Write-Ahead Log(WAL)是一种保证事务持久性和数据一致性的机制。WAL记录了所有对数据库的修改,使得即使在系统崩溃或硬件故障后,也能通过WAL日志恢复数据到一致性状态。wal-g充分利用WAL特性,...
本文将深入探讨如何使用Java实现实时同步PostgreSQL数据库中的数据变化,基于Write-Ahead Log (WAL) 日志机制。PostgreSQL是一种功能强大的开源关系型数据库系统,它支持多种高级特性,包括WAL,这一特性使得数据库...
在ACID的基础上,数据库系统通过Write-Ahead Log、Redo和Undo日志来保证事务的正确性。例如,原子性的实现常常依赖于事务槽和系统变更时间戳(SCN),确保每个变更记录的完整性。一致性通过读脏数据的禁止和锁机制来...
它使用 WAL(Write-Ahead Log)来记录 Procedure 的执行信息,并在启动时将所有 WAL 都 replay 一遍来恢复数据。ProcedureStore 还维护了一个 Tracker 来跟踪活跃的 Procedure。 Procedure Lock 是一个锁机制,用于...
- WAL(Write-Ahead Log):这是事务日志文件的上下文,确保了事务日志条目在描述的数据页变更之前必须达到稳定的存储介质。 - Xlog(事务日志):与WAL类似,但在事务日志缓冲区上下文中使用。 - LSN(日志序列号)...
- WALObserver:关注WAL(Write-Ahead Log)相关操作,比如日志记录。 - MasterObserver:处理DDL(Data Definition Language)操作,例如表的创建、删除和修改。 - Endpoint:作为动态RPC插件的接口,其服务端...
逻辑复制的工作原理是,master 节点将其更改记录写入到 WAL(Write-Ahead Log)日志中,然后发送到 slave 节点,slave 节点将其应用于本地数据库中。 2. 分区语法(Partitioning Syntax) Postgres 10 引入了分区...
RocksDB的特性如Write-Ahead Log (WAL)、Column Family(列族)管理、Compaction优化等,都为TendisPlus提供了更高效的数据管理和访问能力。 总结,TendisPlus结合RocksDB的强大功能,为开发者提供了一个可靠的...
它通过 WAL(Write-Ahead Log)机制来实现数据复制,WAL 是一种日志记录机制,记录了所有对数据库的修改操作。 Walsender 是一种特殊的进程,负责将 WAL 记录从主数据库发送到备用数据库,以实现数据复制。Wal...
- `wal_level`:定义WAL(Write-Ahead Log)级别,影响可恢复性和复制选项。 - `archive_mode`:启用或禁用WAL归档,确保灾难恢复。 - `archive_command`:指定用于将WAL段归档到外部存储的命令。 7. **并发控制...
例如,在PostgreSQL数据库中,XLOG就是wal(Write-Ahead Log)的一部分,用于确保数据的一致性和完整性。 “MM”可能是数据库名称的缩写,或者是特定模块或系统的标识。然而,没有更多的上下文,我们只能猜测它的...
领导者负责将这些更改记录到Write-Ahead Log (WAL),这是一个日志文件,用于保证数据的持久性。一旦WAL写入完成,领导者会提交memtable,并唤醒所有跟随者,然后整个组向上层返回确认写入成功。 **并发写入优化**:...
当HBase中的数据发生变化(如Put或Delete操作)时,这些变更会被记录在WAL(Write-Ahead Log)日志中。随后,后台的复制线程会将这些变更事件发送到Solr,以创建或更新索引。这一过程与MySQL的主从复制机制类似,每...
每次执行PITR时,都会创建一个新的时间线,这有助于区分不同恢复尝试时生成的写前日志(Write-Ahead Log,WAL)。在单个服务器上,时间线通常是线性的,表示数据库状态的变化历史。 当进行PITR时,例如在误删数据后...