为了实现为多用户提供服务且保证系统性能,在一个多进程Oracle 系统(multiprocess Oracle system)中,存在多个被称为后台进程(background process)的Oracle 进程。
一个Oracle 实例中可以包含多种后台进程,这些进程不一定全部出现在实例中。系统 中运行的后台进程数量众多,用户可以通过V$BGPROCESS 视图查询关于后台进程的信 息。这里给大家简单介绍一些经常用到的数据库后台进程:

  • ● 系统监控进程(SMON),主要任务是实例启动时执行恢复性工作,对有故障数据库实例进行恢复。
    ● 进程监控进程(PMON),主要任务用于恢复失败的用户进程。
    ● 数据库写入进程(DBWn),将修改后的数据块内容写回数据文件。
    ● 日志写入进程(LGWR),将内存中的日志内容写入日志文件。
    ● 检查点进程(CKPT),启动检查点,用于减少数据库实例恢复所需要的时间。
    ● 归档进程(ARCn),当数据库服务器以归档方式运行时调用该进程完成日志归档。
    ● 恢复进程(RECO),用于分布式数据库中的失败处理。
    ● 锁进程(LCKn),在并行服务器模式下确保数据的一致性。
    ● 调度进程(Dnnn),负责把用户进程分配到可用的服务进程进行处理。

1.查看后台进程

1 SQL> SELECT name FROM v$bgprocess WHERE paddr!='00'; 2 或者 3 [oracle@oracle ~ ]$ ps -ef | grep ora_

2.LGWR 日志写入进程(Log Writer)

LGWR 日志写入进程负责将重做日志缓冲区的日志条目写入磁盘上的联机日志文件。
当运行DML 或DDL 语句时,服务器进程首先要将事务的变化记载到重做日志缓冲区, 然后才会写入数据高速缓冲区,并且重做日志缓冲区的内容将会被写入联机重做日志文件, 以避免系统出现意外带来的数据损失(如果操作系统断电,内存中的重做日志缓冲区的内容 会丢失,而存在磁盘上的联机日志文件则不会丢失),这项任务由LGWR 来完成。
重做日志缓冲区是一个循环结构,LGWR 将重做日志缓冲区中的重做记录写入联机重 做日志文件后,相应的缓冲区内容将被清空,保证Oracle 有空闲的重做日志缓冲区可以写 入。

在出现以下情况时LGWR 会开始工作:

  • ● 在DWBR 进程将脏缓冲区写入数据文件之前。 //预写协议
    ● 在重做日志记录达到缓冲区的三分之一。
    ● 日志缓冲区记录的日志多于1M。
    ● 每隔3 秒钟。 //重做日志缓冲区是循环使用的,要腾出足够的空间给新的记录使用
    ● 提交事务(执行Commit)。 //提交事务相当于确定保存修改,不存入日志文件就有丢失的可能

Oracle 总是先记载数据变化到重做日志缓冲区,然后才修改数据高速缓存。与之类似, 在后台进程DBWn 将脏缓冲区写入到数据文件之前,首先要由后台进程LGWR 将重做日志 缓冲区写入到重做日志中。与数据高速缓存相比,重做日志缓冲区相对要小得多,但写入频 率高的多,Oracle 必须要确保重做日志缓冲区总有足够的空间容纳新事务,因此每隔3 秒 钟或重做日志缓冲区已有三分之一填满时LGWR 会自动工作。
另外,Oracle 采用了快速提交机制,当执行COMMIT 操作时,并不是将“脏缓冲区”数 据写入到数据文件中,而是将重做日志缓冲区的内容写入到重做日志文件中,以确保数据库 完整性。此时即使系统出现意外情况(如掉电、系统崩溃等),因为被提交事务已经记载到 了存放在磁盘上的联机重做日志文件中,将来在重新启动数据库时系统会自动进行实例恢 复,并将事务所修改数据写入到数据文件中,从而避免了数据丢失。

3.DBWn 数据库写入进程(Database Writer)

数据库写入进程负责将数据库高速缓冲区(脏缓冲区)的内容写入到数据文件。 尽管有一个数据库写进程( DBW0 )适用于大多数系统,但数据库管理员可以配置额 外的进程(DBW0-DBW9,最多10 个进程),以提高写入性能,通过设置初始化参数 DB_WRITER_PROCESSES 来完成。如果你的系统修改数据严重,这些额外的DBWn 进 程在单处理器系统不是非常有用。
当 数据库高速缓冲区的块被修改,它被标记为脏缓冲区并添加到以SCN(System Change Number,系统更改号,这里可以看做“时间”)为顺序的LRUW(LRUWriter)列表。 同时,这个顺序与重做日志缓冲区的顺序一致。

在出现以下情况时DBWn 进程会开始工作:

  • ● 系统发出检查点指令。
  • //同步数据,详见检查点进程(CKPT)。
    ● 脏缓冲区个数达到指定阀值。
    ● 服务进程搜索一定数目的数据块后,不能找到自由缓冲区。
    ● 数据写入计时时间到。 //客户端执行SELECTINSERTUPDATEDELETE 语句时,都需要访问数据库高 速缓冲区。如果是第一次访问,必须要将数据由数据文件读取到数据库高速缓冲区,所 以Oracle 必须要确保数据高速缓存总是存在足够的“自由缓冲区”以容纳新数据。 当DBWn 进程将脏缓冲区的数据块写入到数据文件后,Oracle 将把“脏缓冲区” 标记为“自由缓冲区”。 因此,为了保证有足够“自由缓冲区”来存放新的数据块,需要DBWn 进程工作。
    ● 表空间脱机或进入只读状态。
    ● 执行删除或截断表操作。
    ● 执行ALTER TABLESPACE … BEGIN BACKUP 命令 //需要同步数据,原理同检查点

4.CKPT 检查点进程(Checkpoint)

CKPT 检查点进程的作用是执行一个“检查点”,同步数据库的所有数据文件、控制文 件和重做日志文件。当执行检查点时,系统促使DBWn 将数据缓冲区中数据的变化写入数 据文件,同时完成对数据文件和控制文件的更新,记录下当前数据库的结构和状态。在执行 一个检查点之后,数据库处于一个完整状态。在数据库发生崩溃后,可以将数据库恢复到上 一个检查点。
Oracle 数据库在执行涉及数据变化的语句时,会针对任何修改生成一个顺序递增SCN (System Change Number)值,并且会将SCN 值连同事务的变化一起记载到重做日志缓 冲区。在数据文件、控制文件头部以及重做日志文件中都记载有该值。Oracle 通过比较各 种文件的SCN 值,确定文件是否损坏、系统是否异常,最终确定系统是需要进行实例恢复 还是介质恢复。在发出检查点时,数据文件、控制文件和重做日志的SCN 值完全一致。

进程CKPT 在以下情况下会开始工作:

  • 发生日志切换 。
  • 关闭实例(SHUTDOWN ABORT 除外)。
  • 手工执行检查点操作。
  • 由初始化参数LOG_CHECKPOINT_INTERVAL 和 LOG_CHECKPOINT_TIMEOUT 强制发出。

假设现在有一张员工工资表,员工号7899 的员工张三工资为8000,由于工作表现良好, 现在为其加薪到10000。
1> 此时,第一次读取,需要将数据从数据文件读入数据库高速缓冲区。

2> 数据读入数据库高速缓冲区后,我们修改数据的条目先记录入重做日志缓冲区:

3> 接着新数据被写入数据库高速缓冲区

4> 提交,LGWR 进程将条目从重做日志缓冲区写入联机重做日志文件

5> 执行检查点CKPT,同步数据库
发现联机日志文件为最新,同步更新数据文件、控制文件,触发了DBWn 进程。

5.SMON 系统监控进程(System Monitor)

SMON 系统监控进程主要作用是强制对数据库进行恢复操作。在实例启动时,如果上 一次数据库是非正常关闭,并且重做日志文件和控制文件的SCN 值是不同的,Oracle 将自 动在重新打开数据库之前,通过执行重做日志文件的记录,来同步所有数据文件、控制文件 和重做日志文件,确保所有数据库文件的一致性,然后才打开数据库。
如果检查点进程一例中,第四步完成后发生系统掉电、崩溃,那么数据会不会丢失呢? 当然不会。我们知道,系统掉电,导致内存中的数据(数据库高速缓冲区)的数据丢失。那 么自然上例中的第五步无法完成(无法从数据库高速缓冲区写入数据文件),但是由于此时 已写入联机日志文件。因此,此时数据将从联机日志文件中更新,而更新的数据量是多少, 自然就是由SCN 决定。
这一过程我们成为“实例恢复”。该过程不需要数据库管理员手工干预,由SMON 进程 自动完成。

该进程还负责在启动实例时清理临时段和合并区(Extent)碎片等工作。所以SMON 进程的工作归纳如下:

  • ● 进行实例恢复
  • ● 合并数据文件的自由空间
  • ● 释放数据文件的临时段

6.PMON 进程监控进程(Process Monitor)

PMON 进程监控进程负责对失败的用户进程或服务进程进行恢复。当用户进程连接到 Oracle 服务器时,Oracle 将在服务器端分配相应的服务进程。这时由PMON 进程来监视用 户进程的执行情况。当由于种种原因,用户对Oracle 数据库的连接,发生崩溃、挂起或异 常终止现象时,该进程负责清除服务进程所占用的资源,回滚没有完成的事务。

当PMON 检测到用户进程失败时,进行的工作归纳如下:

  • ● 回滚当前用户的事务
  • ● 释放当前用户加的表或行级锁
  • ● 释放用户的其他资源
  • ● 重新启动死掉的调度进程

假定我们在客户端运行SQL*Plus 并通过网络访问Oracle 服务器,那么Oracle 将在服 务器端分配相应的服务进程。假如用户异常终止SQL*Plus,或出现网络断开或客户端死机 的情况,PMON 就必须检测到这种情况,并释放掉服务进程所占用的资源。

7.ARCn 归档进程(Archive)

ARCn 归档进程完成日志的归档备份,是一个可选后台进程。当数据库运行于归档日志 模式(ARCHIVELOG)下时,负责将已写满的重做日志文件复制到归档日志目标文件中, 这样可以保留所有的重做记录。有了归档日志和数据库早期的物理备份,即使发生磁盘数据 丢失,也可以通过原来的数据文件和归档日志进行恢复。
日志文件是循环使用的,当一个日志写满后,自动切换到另一个日志文件。ARCn 进程 在重做日志文件进行切换时开始工作,将写满的重做日志文件写入归档日志文件。根据归档 任务量的大小,通过设置初始化参数,可以同时启动多个ARCn 进程。Oracle 服务器默认 的是非归档模式,通过修改初始化参数文件中的参数可以改变归档模式。生产数据库通常都 会设置为归档模式。

8.RECO 恢复进程(Recover)

RECO 恢复进程负责在分布式数据库(Distributed Database)环境下,自动恢复失败的 分布式事务。当某个分布式事务由于网络连接故障或者其他原因失败时,RECO 进程将会 尝试与该事物相关的所有数据库进行联系,已完成对失败事物的处理工作。

9.Dnnnn 调度进程

Dnnnn 调度进程是多线程服务器体系结构的一部分,调度进程接受用户进程的请求, 将他们放入到请求队列中,然后为请求队列中的用户进程分配一个服务进程。

转自:

Oracle 服务器结构 - 一品堂.技术学习笔记 - 博客园​www.cnblogs.com

自动清理归档日志_LGWR 日志写入进程相关推荐

  1. PostgreSQL归档配置及自动清理归档日志

    PostgreSQL归档配置及自动清理归档日志 在生产环境中,数据库都需要开启归档模式,那么PG该如何开始归档呢? PG中归档配置涉及几个参数: # - Archiving - #是否开启归档 #ar ...

  2. 自动清理归档日志_Oracle重做日志和日志挖掘

    为什么需要redo log 内存中数据修改后,不必立即更新到磁盘---效率 由日志完成数据的保护目的---效率 其他副产品数据恢复(备份集+归档日志)数据同步(DG,streams,goldengat ...

  3. 自动清理归档日志_从MYSQL 数据库归档 到 归档设计

    到数据归档,很多人的第一个概念就是,不就是无用的数据,换个地方放吗,直接拷贝,删除不就得了,有那么麻烦. 我见到过的,听到过的数据库归档的方法有以下几种 1  数据通过人工的手段来进行清理,直接将表换 ...

  4. linux日志自动清理归档,Linux系统实现log日志自动清理

    背景简介 在实际项目中由于服务器内存有限,人工制定的定时清理时常会忘记.因此启用linux系统定时任务去执行日志清理功能.引用文献 1.创建shell脚本及执行权限 touch clean.sh // ...

  5. Linux/Centos Tomcat 配置日志切分以及脚本自动清理

    Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache,Sun和其他一些公司及个人共同开发而成.由于有了Sun ...

  6. zookeeper3.4.6配置实现自动清理日志

    在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存 ...

  7. python 技术篇-logging模块的日志定期清理设置,自动清理上个月的日志实例演示

    先说一下我设置的清理日志原理: 每天都建立一个新的日志文件来存储日志,每次启用程序时检查日志目录里的所有日志文件,自动清理上个月之前的日志. 如图,我把日期存在当天日志的名字里. 然后遍历目录下所有的 ...

  8. zookeeper3.4.5自动清理日志

    2019独角兽企业重金招聘Python工程师标准>>> 从3.4.0开始,zookeeper提供了自动清理snapshot和事务日志的功能, 通过配置 autopurge.snapR ...

  9. zookeeper3.4.6配置实现自动清理日志【转】

    在使用zookeeper过程中,我们知道,会有dataDir和dataLogDir两个目录,分别用于snapshot和事务日志的输出(默认情况下只有dataDir目录,snapshot和事务日志都保存 ...

最新文章

  1. Nature:麻省理工人造「巨型原子」问世,量子处理和量子通信合二为一
  2. 华为工程师SRECon Asia见闻:聚焦可靠性、资源优化及性能提升
  3. js 前端操作的分页路由设计
  4. docker 绑定固定ip 跨主机容器互访
  5. FreeRTOS信号量---二值信号量
  6. 闭包/私有化变量方法
  7. 不属于处理数据的计算机应用,计算机应用基础6
  8. Python—requests模块详解
  9. 创建新的apple id_新的Apple Maps与Google Maps:哪个适合您?
  10. 经济学人 MAY 12TH–18TH 2018 page 32阅读————2020-02-25
  11. python爬腾讯视频地址_腾讯视频爬虫
  12. android 4.1.2大小,4.1.2 Activity初窥门径
  13. not executable: 64-bit ELF file 已解决
  14. 【转】 看《墨攻》理解IoC概念
  15. 如何学习 C++ 如何学习一门较复杂的编程语言 【转】
  16. 九、JavaSE-Set接口
  17. 基于AVX256指令集和多线程优化的双机计算加速程序
  18. 百度地图点聚合优化重写
  19. html怪异模式是什么,浅谈CSS编程中的怪异模式
  20. ADIS16400/ADIS16405带磁力计的三轴惯性传感器(2)

热门文章

  1. web可用性测试_Web开发人员和设计人员的最佳可用性测试工具
  2. 像程序员一样思考:如何仅使用JavaScript,HTML和CSS来构建Snake
  3. 117_PowerQuery使用ODBC访问带密码的Access
  4. java map reduce 原理_MapReduce实现原理详解
  5. Scrapy添加随机ip
  6. macOS下使用gcc编译GLUT+CPP的连接语句
  7. dubbo配置参考手册
  8. flask中蓝图的使用
  9. 两本电子书 |Flink 最佳学习实践 | 从 0 到 1 学会 Apache Flink
  10. C#中的套接字编程(一) --转