`
xitonga
  • 浏览: 610963 次
文章分类
社区版块
存档分类
最新评论

oracle四个重要的后台进程(DBWR / LGWR / ARCH / CKPT)

 
阅读更多

oracle体系结构图:


后台进程和恢复:检查点(DBWR)

DBWR进程是将DATA BUFFER中的数据写入,磁盘数据文件,在这个过程中,首先保证安全,所谓安全,就是在写过程中,一旦发生实例崩溃,要有一套完整的机制能够保证用户以及提交的数据不丢失,其次保证安全基础上,要尽可能的提高效率,众所周知,I/O操作是最昂贵的操作,所以应尽可能的将脏数据收集到一定程度以后在批量写入磁盘。

最直观,简单的方法就是,只要用户提交的时候将所改变的内存数据给DBWR,写入到数据文件,这样的话,一定能保证提交的数据不丢失,但是这种方式效率最低,在高并发环境中,频繁离散写效率最低,

因此oracle引入了LGWR 和 CKPT 这两个后台进程,这两个进程与DBWR进程相互合作,提供了既安全又高效的写脏数据的解决办法,

DBWR触发条件

1. 产生检查

2. 脏数据缓冲区达到阀值 默认 10%

3.扫描整个data buffer没有空闲

data buffer 中包含脏的和未脏的优先写脏数据列表 再写未脏块

4. timeout 超时,如果DBWR没事做 会被每三秒唤醒一次去巡检 写不写不一定

5. 表级别的truncate 或 drop 也会触发数据写

6. 修改表空间的 read only

7. 做表空间的offline (离线)

8. 热备份 begin backup 命令


后台进程和恢复:重做日志文件和LGWR

用户在修改日志内存数据块时都会在日志缓冲区中构造一个相应的重做条目(redo entry),该redo条目描述了被修改的数据块在修改之前和修改之后的值,而LGWR进程负责将这些redo条目写入到联机日志文件,只要redo条目写入了联机日志文件,那么数据就安全了。

假如DBWR在写脏数据块的过程中,突然发生实例崩溃,该怎么办?我们已经知道,用户提交时,oracle不一定会把提交的数据块写入数据文件的,那么实例崩溃时,必然会有一些已经提交但是还没有写入数据文件的内存块丢失,当实例再次启动时,oracle需要利用日志文件记录的redo条目在buffer cache中重新构造出被丢失的数据块,从而完成前滚和回滚的工作,将丢失的数据块找回来。

这里存在一个问题,就是oracle在日志文件中找redo条目时,到底应该找哪些redo 条目?换句话说,应该在日志文件中从哪个起点开始往后应用redo条目,注意这里的日志文件可能不止一个日志文件,为预防随时可能的实例崩溃现象,所以oracle在数据库的正常运行过程中,会不断地定位这个起点,以便在不可预期的实例崩溃中能够有效的保护并恢复数据,同时,这个起点的选择非常讲究,首先这个启动不能太靠近日志文件头部,太靠近日志文件头部意味着要处理很多redo条目,这样导致再次启动实例时所进行恢复的时间太长;其次,这个起点不能太靠近日志文件尾部,太靠近日志文件尾部说明只有很少的脏数据块没有写入数据文件,也就是说已经有很多脏数据块被写入数据文件,那就意味着只有在DBWR进程很频繁的写数据文件的情况下,才能使Buffer cache中所残留的脏数据块的数据量很少,但很明显,DBWR写的越频繁,那么占用写数据文件的I/O就越严重,那么留给其他操作(比如读取buffer cache中不存在的数据块等)的I/O资源就越少,这显然也是不合理的。

为了能够确定这个最佳的起点,oracle引入了CKPT进程,通常也叫做检查点进程实现完全检查点和增量检查点来分别定位起点

在重做日志文件中记录了由于执行事务处理和oracle服务期内部操作而对数据库所做的更改。(事务处理是逻辑工作单元,由用户运行的一个或多个SQL语句组成。)使用重做日志文件时,可避免因断电、磁盘故障等引起的系统故障而导致数据库的数据不完整。重做日志文件必须多路复用,才能确保在出现磁盘故障事件时不丢失其中存储的信息。

重做日志由重做日志文件组组成。重做日志文件组又由重做日志文件其多路复用副本组成。每个相同的副本都是该组的一个成员,每个组按编号标识。LogWriter(LGWR) 进程将重做记录从重做日志缓冲区写入重做日志组的所有成员,直至文件已填满或请求了日志切换操作。然后,这个进程会切换至下一组中的文件并执行写入。重做日志组以循环方式使用。

最佳方案提示:多路复用的重做日志文件应尽量驻留在不同的磁盘中。

重做日志文件:

·记录数据库的更改

·应多路复用以避免文件丢失

LogWrier触发条件:

· 提交时(commit)

·Redo log buffer 达到三分之一满时

· Redo log buffer 达到1M

· 每隔三秒写一次

· DBWn执行写入之前


后台进程和恢复:检查点(CKPT)

oracle为检查点进程提供了检查点队列,该队列串起来的都是脏数据块所对应的buffer header.每次DBWR写脏数据时,也是从检查点队列上扫描脏数据块,并将这些脏数据块写入数据文件中,当写完以后,DBWR会将这些已经写入数据文件的脏数据块从检查点队列上摘下来。

检查点队列上的buffer header 是按照数据块第一次被脏的时间先后顺序来排列的。

越早修改的数据块的buffer header排在越前面,

同时如果一个数据块被修改了多次的话,在该链表上也只出现一次。

检查点队列里记录着这次的修改产生的redo 条目在redo 文件中的位置,简称(RBA)

检查点队列上的buffer header 还记录了脏数据块在第一次被修改时,所对应的重做条目在重做日志文件中的地址,也就是LRBA(Low Redo Block Address)

数据块最后一次修改的地址叫做HRBA

当数据块第一次被修改时LRBA与HRBA是同一个地址,当同一个数据块第二次修改时则更新HRBA值。

在检查点队列里最后一个记录的 RBA 被称为ON DISK RBA

概括下来其实就是 DBWn 负责写检查点队列上的脏数据块,而CKPT 负责记录当前检查点队列的第一个数据库块所对应的重做日志条目在日志文件中的地址,将其写入到控制文件中去。


oracle8I 版本前只是完全检查点,完全检查点就意味着buffer cache中所有脏数据都完全写入到了数据文件中。

那个版本,日志切换就会触发完全检查点


到了8I 版本后,完全检查点只有在两种情况下才触发:

1. alter system checkpoint;

2. 除了shutdown abort 以为的正常关库命令


手动执行 alter system checkpoint 完全检查点会将所有脏块写盘(包括未提交的)

关闭数据库时会将未完成的事务回滚,再将脏块写盘


同时,完全检查点会更新控制文件和数据文件头

检查点队列随着时间增长,由CKPT 通知DBWR 去写,每次告诉DBWR 写到队列的什么地方,与主机的I/O效率有关,也就是CKPT 是监工,向 DBWR 提交任务, DBWR 即为劳力

CKPT 除了通知DBWR 去写以外,还会每三秒检查一次 DBWR 的工作进度,并将DBWR 当前记录到控制文件,如果三秒触发,CKPT 只做一件事,就是找出检查点队列里的第一个 buffer header,并将该buffer header 中所记录的LRBA(Low Redo Block Address Low 表示第一次被脏对应的RBA) 将LBRA 记录到控制文件中去。


每隔三秒(或频率更高),CKPT进程在 控制文件中存储一次数据,以记录DBWn从SGA写入磁盘的修改数据块。这就成为“检查点”

检查点的用途就是标识联机重做日志文件开始进行实例恢复的位置(这个位置称为“检查点位置”)。

如果使用日志切换,CKPT 进程还会将这个检查点信息写入到数据文件头。

检查点因以下原因而存在:

· 确保定期将内存中的修改数据块写入磁盘,以便在系统或数据库出现故障的情况下不丢失数据

· 减少实例恢复所需的时间。只有跟在最后一个检查点后面的联机重做日志文件才需要进行过恢复处理。

· 确保所有提交数据在关闭过程中都写入数据文件

由CKPT进程写入的检查点信息包含检查点位置系统更改号联机重做日志文件中开始恢复的位置关于日志的信息等等。

注:CKPT进程并不将数据块写入磁盘,也不将重做块写入联机重做日志文件。

在检查点上发出DBWn信号

使用检查点信息更新数据文件头

使用检查点信息更新控制文件


后台进程和恢复:归档程序 (ARCn)

ARCn是一个可选的后台进程。但是,在丢失磁盘后恢复数据库时,这个进程的作用至关重要。联机重做日志文件填满后,oracle实例开始写入下一个联机重做日志文件。从一个联机重做日志文件切换到另一个联机重做日志文件的过程称为日志切换。

ARCn进程在每次进行日志切换时都会开始对已填满的日志组进行备份或归档。它会在可以重新使用日志之前自动归档重做日志文件,因此会保留对数据库所做的所有更改。这样,即使磁盘驱动器损坏,也可以将数据库恢复到故障点。

DBA 必须做出的一个重要决策是,配置数据库在ARCHIVELOG模式下运行,还是在NOARCHIVELOG模式下运行。

· 在NOARCHIVELOG模式下,每次发生日志切换时,都会件覆盖联机重做日志文件

· 在ARCHIVELOG模式下,必须先归档非活动的已填满联机重做日志文件组,才可以再次使用这些组

注:ARCHIVELOG 模式对大多数备份策略而言是必须选择的模式(并且极易配置)。

一个可选的后台进程

为数据库设置了ARCHIVELOG模式后自动归档联机重做日志文件

保留对数据库进行的所有更改的记录




oracle进行备份的需要了解的知识:

oracle常见的故障类型:http://blog.csdn.net/wanghui5767260/article/details/20696235

oracle实例恢复 详解理论知识:http://blog.csdn.net/wanghui5767260/article/details/20769321

oracle物理备份和逻辑备份理解:http://blog.csdn.net/wanghui5767260/article/details/20627639


分享到:
评论

相关推荐

    Oracle进程结构及后台进程简介

    后台进程是Oracle实例的重要组件,它们在后台默默地执行维护任务,以优化系统性能和确保数据一致性。以下是一些关键的后台进程: 1. DBWR(数据库写入程序):负责将缓冲区中的修改写回数据文件。当缓冲区被修改后...

    Oracle数据库入门(PPT)

    (6)后台进程 PMON,LCLN,RECO,SMON,DBWR,LGWR,CKPT,ARCH PMON 做程序的清洁工作,处理一些不正常退出的事件. SMON 做系统的清洁工作,执行系统出错后自动恢复工作. LCKN Oracle系统表级或行级加锁的进程. ...

    ORACLE进程.pptx

    用户进程主要负责执行应用程序,而Oracle进程则分为服务器进程和后台进程。 服务器进程是与用户进程交互的关键,它们处理用户进程的SQL请求,包括语句解析、数据读取以及结果返回。在本地连接的情况下,用户进程和...

    ORACLE数据库入门1.ppt

    ORACLE数据库的后台进程包括PMON、LCKN、RECO、SMON、DBWR、LGWR、CKPT和ARCH等。这些进程负责处理数据库的各种操作,如事务恢复、系统清洁、锁管理等。 七、SQL语句执行过程 SQL语句的执行过程包括语法分析、...

    Oracle 9i数据库管理培训测试题

    7. 有效的Oracle后台服务器进程包括ARCHiver(归档进程)、LGWR(日志写入器)和DBWR(数据库写入器)。因此,选项4 "所有以上"是正确的。 8. 将修改过的块写入数据文件的过程是DBWR(数据库写入器)。选项1 "DBWR...

    oracle数据库体系结构之一【进程结构】

    在多进程结构中,Oracle后台进程扮演着关键角色,包括Dnnn(Dispatcher)、DBWR(Database Writer)、LGWR(Log Writer)、ARCH(Archiver Log Process)、PMON(Process Monitor)、SMON(System Monitor)、CKPT...

    Oracle 10g数据库创建核心过程解析.pdf

    后台进程则包括进程PMON、SMON、DBWR、LGWR、CKPT和ARCH等,其中DBWR负责将缓冲区数据写入数据文件,而LGWR负责将日志缓冲区内容写入重做日志文件。 创建Oracle数据库有两种方式:手工(脚本)方式和图形化方式。手工...

    Oracle数据库试题.pdf

    10. **Oracle进程结构**:Oracle实例由SGA和后台进程组成,后台进程包括SMON、PMON、DBWR、LGWR等,而PGA(程序全局区)是与每个用户会话关联的内存区域,不属于实例的组成部分。 11. **资源管理**:当数据缓冲区无...

    oracle入门简介.pptx

    Oracle 数据库有多个背景进程,包括 PMON、LCKN、RECO、SMON、DBWR、LGWR、CKPT、ARCH 等进程。这些进程负责处理数据库的各种操作,例如清洁工作、处理不正常退出的事件、系统恢复等。 三、会话和事务 Oracle ...

    Oracle系统培训软件公司技术支持中心ppt课件.ppt

    后台进程如PMON、SMON、LCKN、RECO、DBWR、LGWR、CKPT和ARCH各有其特定功能,如监控、清理、数据写入、日志写入和归档等。 在逻辑架构方面,Oracle系统以数据块(Data Block)为基础,这是数据库进行I/O操作的最小...

    ORACLE学习笔记.pdf

    11. **后台进程**: 包括DBWR、LGWR、CKPT、SMON、PMON、ARCH、RECO、LCKn等,它们执行数据库的后台任务,如数据写入、日志写入、检查点操作、进程监控等。 - **DBWR**: 负责将脏数据缓冲区中的更改写入数据文件。 ...

    OracleDBA教程适合Oracle11gPPT学习教案.pptx

    Oracle实例中的后台进程负责监控和维护数据库的正常运行,如DBWR进程负责将缓冲区高速缓存中的更改写入数据文件,SMON进程用于系统监控和恢复,PMON进程管理用户进程,CKPT进程触发定期检查点以同步SGA和数据文件,...

    第八章ORACLE 系统管理简介ppt.pptx

    后台进程则负责数据库的后台操作,如DBWR,LGWR,PMON,SMON,CKPT,ARCH和RECO。 - **后台进程**: - **数据库写入器(DBWR)**:将SGA中数据库缓冲区缓存中的更改写回数据文件,确保数据的一致性。 - **...

    第四章Oracle.docx

    - 后台进程(Background Process):执行数据库维护任务,如DBWR(数据库写入程序)、LGWR(日志写入程序)等。 3. 文件(File) - 数据文件(Data File):存储数据库的实际数据。 - 控制文件(Control File)...

    Oracle 10g 数据库管理 应用与开发 标准教程 课后答案

    - CKPT进程:更新控制文件,标记检查点。 - ARCH进程:归档日志操作。 7. **SGA 内存区域**: - 循环使用的内存区域是日志缓冲区。 - 解析后的SQL语句缓存在共享池中。 8. **进程功能**: - PMON用于释放资源...

    oracle pl/sql

    后台进程如PMON(进程监控器)、SMON(系统监控器)、LCKN(锁管理进程)、RECO(恢复进程)、DBWR(数据写进程)、LGWR(日志写进程)、CKPT(检查点进程)和ARCH(归档进程)各自承担着不同的任务,确保数据库的...

    Oracle体系结构46256987101.ppt

    综上所述,Oracle体系结构是一个复杂的系统,由多个相互协作的组件构成,包括例程、内存区域、后台进程和数据库结构。理解这些组件的工作原理对于优化数据库性能和解决问题至关重要。Oracle数据库的设计使其能够高效...

Global site tag (gtag.js) - Google Analytics