zoukankan      html  css  js  c++  java
  • Oracle 体系结构之后台进程

    后台进程(Background process)---V$BGPROCESS ,后台进程是Oracle的程序,用来管理数据库的读写,恢复和监视等工作。Server Process主要是通过他和user process进行联系和沟通,并由他和user process进行数据的交换。在Unix机器上,Oracle后台进程相对于操作系统进程,也就是说,一个Oracle后台进程将启动一个操作系统进程;在Windows机器上, Oracle后台进程相对于操作系统线程,打开任务管理器,我们只能看到一个ORACLE.EXE的进程,但是通过另外的工具,就可以看到包含在这里进程中的线程。

    在Unix上可以通过如下方法查看后台进程:

    ps–ef|grep ora_

    Oracle系统有5 个基本进程:

    • DBWR(数据文件写入进程)
    • LGWR(日志文件写入进程)
    • SMON(系统监护进程)
    • PMON(用户进程监护进程)
    • CKPT(检查点进程,同步数据文件, 日志文件,控制文件)

    a、DBWR

    将修改过的数据缓冲区的数据写入对应数据文件

    维护系统内的空缓冲区

    这里指出几个容易错误的概念:

    当一个更新提交后,DBWR把数据写到磁盘并返回给用户提交完成.

    DBWR会触发CKPT 后台进程

    DBWR不会触发LGWR 进程

    上面的概念都是错误的.

    DBWR是一个很底层的工作进程,他批量的把缓冲区的数据写入磁盘。和任何前台用

    户的进程几乎没有什么关系,也不受他们的控制。

    DBWR工作的触发条件:

    a)DBWR超时3秒;

    b)系统中没有多的空缓冲区用来存放数据;

    c)CKPT进程触发DBWR 等。

    Oracle允许允许同时运行多个DBWn进程,以分担繁琐的写负载,这就是DBWn中n的来历,数据库中最多可以使用20个DBWn进程。

    b、LGWR

    将重做日志缓冲区的数据写入重做日志文件,LGWR是一个必须和前台用户进程通信的进程。当数据被修改的时候,系统会产生一个重做日志并记录在重做日志缓冲区内。这个重做日志可以类似的认为是以下的一个结构:

    SCN=000000001000

    数据块ID

    对象ID=0801

    数据行=02

    修改后的数据=0011

    提交的时候,LGWR必须将被修改的数据的重做日志缓冲区内数据写入日志数据文件,然后再通知前台进程提交成功,并由前台进程通知用户。从这点可以看出LGWR承担了维护系统数据完整性的任务。

    LGWR工作触发条件:

    a)用户提交;

    b)有1/3 重做日志缓冲区未被写入磁盘;

    c)有大于1M 重做日志缓冲区未被写入磁盘;

    d)3秒超时;

    e)DBWR需要写入的数据的SCN号大于LGWR 记录的SCN号,DBWR 触发LGWR写入。

    LGWR将重做条目写入联机日志文件的情况分两种:

    后台写(background write)和同步写(sync write)。

    触发后台写的条件有四个:

    1)每隔三秒钟,LGWR启动一次;

    2)在DBWR启动时,如果发现脏数据块所对应的重做条目还没有写入联机日志文件,则DBWR触发LGWR进程并等待LRWR写完以后才会继续;

    3)重做条目的数量达到整个日志缓冲区的1/3时,触发LGWR;

    4)重做条目的数量达到1MB时,触发LGWR。

    而触发同步写的条件就一个:

    当用户提交(commit)时,触发LGWR。

    日志缓冲区是一个循环缓冲区。当LGWR将日志缓冲区的日志项写入日志文件后,服务器进程可将新的日志项写入到该日志缓冲区。LGWR 通常写得很快,可确保日志缓冲区总有空间可写入新的日志项。

    注意:有时候当需要更多的日志缓冲区时,LWGR在一个事务提交前就将日志项写出,而这些日志项仅当在以后事务提交后才永久化。

    ORACLE使用快速提交机制,当用户发出COMMIT语句时,一个COMMIT记录立即放入日志缓冲区,但相应的数据缓冲区改变是被延迟,直到在更有效时才将它们写入数据文件。当一事务提交时,被赋给一个系统修改号(SCN),它同事务日志项一起记录在日志中。由于SCN记录在日志中,以致在并行服务器选项配置情况下,恢复操作可以同步。

    c、SMON

    工作主要包含:

    清除临时空间;

    在系统启动时,完成系统实例恢复;

    聚结空闲空间;

    从不可用的文件中恢复事务的活动;

    OPS中失败节点的实例恢复;

    清除OBJ$表;

    缩减回滚段;

    使回滚段脱机;

    d、PMON

    主要用于清除失效的用户进程,释放用户进程所用的资源。如PMON将回滚未提交的

    工作,释放锁,释放分配给失败进程的SGA资源。

    e、CKPT

    同步数据文件,日志文件和控制文件,由于DBWR/LGWR的工作原理,造成了数据文

    件,日志文件,控制文件的不一至,这就需要CKPT进程来同步。

    CKPT会更新数据文件/控制文件的头信息。

    CKPT工作触发条件:

    在日志切换的时候;

    a)数据库用immediate ,transaction , normal 选项shutdown 数据库的时候;

    b)根据初始话文件LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的设置的数值来确定;

    c)用户触发。

    以下进程的启动需要手工配置

    a、ARCH

    当数据库以归档方式运行的时候,Oracle会启动ARCH进程,当重做日志文件被写满时,日志文件进行切换,旧的重做日志文件就被ARCH进程复制到一个/多个特定的目录/远程机器。这些被复制的重做日志文件被叫做归档日志文件。

    b、RECO

    负责解决分布事物中的故障。Oracle可以连接远程的多个数据库,当由于网络问题,有些事物处于悬而未决的状态。RECO进程试图建立与远程服务器的通信,当故障消除后,RECO进程自动解决所有悬而未决的会话。

    c、LCKn

    是在具有并行服务器选件环境下使用,可多至10个进程(LCK0,LCK1……,LCK9),

    用于实例间的封锁。

    d、服务进程Server Process

    服务进程的分类

    专用服务进程(Dedicated Server Process) :一个服务进程对应一个用户进程

    共享服务进程(MultiTreaded Server Process) :一个服务进程对应多个用户进程,轮流为用户进程服务。


    作者:czjie
    出处:http://www.cnblogs.com/czjie/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    1442. Count Triplets That Can Form Two Arrays of Equal XOR
    1441. Build an Array With Stack Operations
    312. Burst Balloons
    367. Valid Perfect Square
    307. Range Sum Query
    1232. Check If It Is a Straight Line
    993. Cousins in Binary Tree
    1436. Destination City
    476. Number Complement
    383. Ransom Note
  • 原文地址:https://www.cnblogs.com/czjie/p/2233644.html
Copyright © 2011-2022 走看看