Oracle数据库中Redo、Undo、控制文件、SCN、DBWR和LBWR、Checkpoint

Oracle数据库的Redo日志用于恢复数据,Undo用于回滚事务。Redo信息在事务提交时写入重做日志文件,Undo信息用于逻辑数据恢复。控制文件存储数据库元数据,SCN是系统变化编号,用于区分操作顺序。DBWR和LGWR进程分别负责将缓冲区的脏数据写入数据文件和日志文件。checkpoint确保数据文件和控制文件同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redo

Redo:redo log file,即重做日志文件,用于恢复数据,是恢复实例失败后的数据。redo是指在失败时重放事务。oracle数据库维护着两类重做日志文件,在线(online)重做日志文件和归档(archive)重做日志文件,这两类重做日志文件都用于恢复,其主要目的就是万一示例失败或介质失败,它们能够恢复数据。

undo

Undo:  用于回滚事务,即将数据回滚到对该数据进行操作之前的样子,其实际作用就是取消一条语句或一组语句。在对数据库数据进行修改时,数据库会生成undo信息,以防事务或语句执行失败时,数据还能恢复到修改之前的样子,或者在执行rollback语句时可以回滚数据。但是要注意的是undo只是让数据库逻辑地恢复到原来的样子,其数据结构以及数据库块本身在回滚后可能大不相同。

示例:

当update一条数据,未提交时就断电了,等数据库重新启动时,数据库会利用undo信息回滚数据,将数据回滚到未修改时的状态,然后就不会再执行update了。

而当uodate一条数据,commit了后,但是数据还在内存中没有写入到文件中,此时断电,当数据库重启时数据库会先回滚数据到原来的样子,然后再执行update,将数据写入到文件中。

注意:oracle中redo信息包含undo。

oracle数据库事务中的数据变化写入数据文件步骤:

  1. 事务开始;
     
  2. 在buffer cache 中找到需要的数据块,如果没有找到,则从数据文件中载入到buffer cache中;
     
  3. 事务修改buffer cache中的数据块,该数据被标识为脏数据,并被写入log buffer中;
     
  4. 事务提交,LGWR进程将log buffer中的脏数据写入到redo log file中;
     
  5. 当发生checkpoint,checkpoint进程更新所有数据文件中的文件头信息,DBWR进程则负责将buffer cache中的脏数据写入到数据文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值