一、Redo log Buffer
Redo log buffer是数据库系统中的一部分,它的主要功能和作用包括:
1.临时存储:redo log buffer 用于临时存储事务的重做记录。
2.提高性能:通过在内存中缓冲重做记录并以批量方式写入磁盘,可以减少磁盘 I/O 操作次数,提高系统性能。
3.数据持久性:确保即使在系统故障情况下,已提交的事务更改也能被恢复,保证数据的持久性和一致性。
4.减少磁盘写入:优化了在写入重做日志文件时的磁盘写入顺序和效率,从而减少了频繁的磁盘写入操作。
总的来说,redo log buffer 的作用是优化数据库系统的性能,并确保事务的持久性和一致性。
Commti提交事务,是从Redo log buffer 通过LGWR写到Redo log file(循环使用)中
对数据修改一定会产生redo ,undo也会产生redo,有索引创建的话也会创建redo。
redo log file的状态:
CURRENT
指当前的日志文件,在进行实例恢复时是必须的;ACTIVE
是指活动的非当前日志,在进行实例恢复时会被用到。Active
状态意味着,Checkpoint
尚未完成,因此该日志文件不能被覆盖。INACTIVE
是非活动日志,在实例恢复时不再需要,但在介质恢复时可能需要。UNUSED
表示该日志从未被写入,可能是刚添加的,或RESETLOGS
后被重置。
Redo entries是数据库变更的相关信息,这些信息以重做条目形式存储。Redo Entries包含重构、重做数据库变更的重要信息,这些变更包括INSERT、UPDATE、DELETE、CREATE、ALTER或者DROP等。在必要的时候,Redo Entries会被用于数据库恢复。
在数据库中,Redo的功能主要通过3个组件来实现:Redo LogBuffer、LGWR后台进程和Redo Log File(在归档模式下,Redo Log File最终会写出为归档日志文件)。在Oracle的SGA中,存在一块共享内存,称为Redo Log Buffer。Redo Log Buffer位于SGA之中,是一块循环使用的内存区域,其中保存数据库变更的相关信息。
总的来说,Redo Entries在Oracle数据库中扮演着关键角色,它们是数据库恢复和事务重演的重要工具。
二、LGWR Background Proccess
LGWR 是 Oracle 数据库中的一个后台进程,其主要作用包括:
1.重做日志缓冲区的管理:LGWR 负责将重做日志缓冲区中的数据持久化到磁盘的重做日志文件中。
2.保证事务的持久性:通过将事务的重做信息写入磁盘,LGWR 确保数据库中的事务在系统故障时可以被恢复,从而实现事务的持久性。
3.协调并发事务的提交:LGWR 确保事务按正确的顺序提交到磁盘上的重做日志文件中,以满足数据库的 ACID 特性(原子性、一致性、隔离性和持久性)。
总之,LGWR 后台进程在 Oracle 数据库中起着至关重要的作用,确保了数据库事务的可靠性和一致性。
LGWR将Redo entries从Redo buffer 写入Redo log file遵循的原则
1.当用户进程提交事务时,LGWR进程会写入一个提交记录。
2.每3秒,LGWR进程会将日志缓冲区的内容写入到日志文件。
3.当日志冲区满1/3时,LGWR进程会将日志缓冲区的内容刷出。
4.在DBWR(数据块写入)将修改缓冲区写入磁盘前,LGWR进程会将日志缓冲区 的内容刷出。
三、Redo log switches
Redo log switch 是指在 Oracle 数据库中,当当前的 redo log 文件已经写满、停止写或者达到一定条件时,系统会自动切换到另一个 redo log 文件继续记录重做日志。这个过程称为 redo log switch。通过不断地进行 redo log switch,可以确保数据库持续地记录事务的变化,并且保证了数据库的持久性和一致性。
一次日志切换会发生checkpoint
小贴士:
事务提交后LGWR会强制将Redo entries从Redo buffer 写入Redo log file中,而DBWn不会强制将
Database Buffer Cache中的数据写入到datafile。