Oracle 必要的后台进程

1 简述

oralce 每次大的版本变更,后台进程都会有一些变动 ,而有些新增的进程,或者由原来拆分的进程是不能杀的。 杀掉可能会引起数据库crash。哪些进程不能杀一定要清晰、明确。

2 必要进程

 

2.1 默认启动后台进程

  • 11G

    [oracle@test1 ~]$ sqlplus -v
    
    SQL*Plus: Release 11.2.0.4.0 Production
    
    [oracle@test1 ~]$ ps -ef|grep ora|grep -v su|grep -v grep|grep -v bash|grep -v more|grep -v ps
    oracle   23144     1  0 22:16 ?        00:00:00 ora_pmon_wtdb
    oracle   23152     1  2 22:16 ?        00:00:12 ora_vktm_wtdb
    oracle   23156     1  0 22:16 ?        00:00:00 ora_gen0_wtdb
    oracle   23158     1  0 22:16 ?        00:00:00 ora_diag_wtdb
    oracle   23160     1  0 22:16 ?        00:00:00 ora_dbrm_wtdb
    oracle   23165     1  0 22:16 ?        00:00:00 ora_dia0_wtdb
    oracle   23167     1  0 22:16 ?        00:00:00 ora_mman_wtdb
    oracle   23169     1  0 22:16 ?        00:00:00 ora_dbw0_wtdb
    oracle   23171     1  0 22:16 ?        00:00:00 ora_lgwr_wtdb
    oracle   23173     1  0 22:16 ?        00:00:00 ora_ckpt_wtdb
    oracle   23175     1  0 22:16 ?        00:00:00 ora_smon_wtdb
    oracle   23177     1  0 22:16 ?        00:00:00 ora_reco_wtdb
    oracle   23179     1  0 22:16 ?        00:00:00 ora_mmon_wtdb
    oracle   23181     1  0 22:16 ?        00:00:00 ora_mmnl_wtdb
    oracle   23183     1  0 22:16 ?        00:00:00 ora_d000_wtdb
    oracle   23185     1  0 22:16 ?        00:00:00 ora_s000_wtdb
    oracle   23237     1  0 22:16 ?        00:00:00 ora_arc0_wtdb
    oracle   23242     1  0 22:16 ?        00:00:00 ora_arc1_wtdb
    oracle   23244     1  0 22:16 ?        00:00:00 ora_arc2_wtdb
    oracle   23246     1  0 22:16 ?        00:00:00 ora_arc3_wtdb
    oracle   23249     1  0 22:16 ?        00:00:00 ora_qmnc_wtdb
    oracle   23266     1  0 22:16 ?        00:00:00 ora_cjq0_wtdb
    oracle   23317     1  0 22:16 ?        00:00:00 ora_q000_wtdb
    oracle   23319     1  0 22:16 ?        00:00:00 ora_q001_wtdb
    oracle   24533     1  0 22:21 ?        00:00:00 ora_smco_wtdb
    oracle   24546     1  0 22:21 ?        00:00:00 ora_w000_wtdb
    oracle   25095     1  0 22:23 ?        00:00:00 ora_j000_wtdb
    oracle   25097     1  0 22:23 ?        00:00:00 ora_j001_wtdb
    

    默认启动的后台进程有: pmon vktm GENn diag dbrm DIAn mman DBWn lgwr ckpt smon reco mmon mmnl Dnnn Snnn ARCn qmnc CJQn Qnnn smco Wnnn Jnnn 23 种。

这些进程的作用,运行机制、触发机制,后面再详细了解,先来看下,哪些进程是必须的。

2.2 哪些进程不能杀

  • 测试脚本

    #!/bin/sh
    function startup()
    {
    sqlplus / as sysdba<<EOF
    startup
    exit
    EOF
    }
    
    started=`ps -ef|grep pmon|grep -v grep|awk '{print $2}'`
    test -z "$started" && startup>>/dev/null
    sleep 5
    
    prolist=`ps -ef|grep ora|egrep -v 'bash|s[uh]|ps|grep|more|sleep|awk|LOCAL|sysdba|log' |awk '{print $NF}'`
    #echo $prolist
    for i in $prolist
    do
    proc_key=`echo $i|awk -F _ '{print $2}'`
    pid=`ps -ef|grep $proc_key|grep -v grep|awk '{print $2}'`
    #echo "oracle 进程 $i 进程关键字 $proc_key 进程ID $pid"
    #echo "kill 进程 $proc_key"
    test -z $pid && echo "$proc_key 不存在"|| kill -9 "$pid"
    sleep 20
    pc=`ps -ef|grep pmon|grep -v grep|wc -l`
    echo "PMON 进程个数 $pc"
    if [ $pc -eq 0 ]; then
       echo "Kill 进程 $proc_key 会导致实例crash!"
       startup >> /dev/null
       sleep 5
    else
       echo "Kill 进程 $proc_key 不会导致实例crash!"
       wexists=`ps -ef|grep w000|grep -v grep|wc -l`
       smc0exists=`ps -ef|grep smc|grep -v grep|wc -l`
       test -z $wexists && echo "w000 进程不存在"
       test -z $smc0exists && echo "smc 进程不存在"
    fi
    done
    
  • 结果

    Kill 进程 pmon 会导致实例crash!
    Kill 进程 vktm 会导致实例crash!
    Kill 进程 gen0 会导致实例crash!
    Kill 进程 diag 不会导致实例crash!
    Kill 进程 dbrm 会导致实例crash!
    Kill 进程 dia0 不会导致实例crash!
    Kill 进程 mman 会导致实例crash!
    Kill 进程 dbw0 会导致实例crash!
    Kill 进程 lgwr 会导致实例crash!
    Kill 进程 ckpt 会导致实例crash!
    Kill 进程 smon 会导致实例crash!
    Kill 进程 reco 不会导致实例crash!
    Kill 进程 mmon 不会导致实例crash!
    Kill 进程 mmnl 不会导致实例crash!
    Kill 进程 d000 不会导致实例crash!
    Kill 进程 s000 不会导致实例crash!
    Kill 进程 p000 不会导致实例crash!
    Kill 进程 p001 不会导致实例crash!
    Kill 进程 arc0 不会导致实例crash!
    Kill 进程 arc1 不会导致实例crash!
    Kill 进程 arc2 不会导致实例crash!
    Kill 进程 arc3 不会导致实例crash!
    Kill 进程 qmnc 不会导致实例crash!
    Kill 进程 cjq0 不会导致实例crash!
    Kill 进程 q000 不会导致实例crash!
    Kill 进程 q001 不会导致实例crash!
    

秒做整理,可知Oracle 11G中 pmon,vktm,gen0,dbrm,mman,dbw0,lgwr,ckpt,smon 这 9 个进程是不能 杀的。都会导致数据库宕机。

上面的脚本,在测试过程中,sleep 的时间调整短一些,发现有时候kill dia0 进程,也会引起实例宕机。 所以这是一个陷阱,不小心就有可能掉进去。

也就是说Oracle 11G 中的必要进程包括9个必须进程+1个高风险进程。

细心的童鞋会发现,测试的结果中有一些进程没有,比如w000,smc0进程,这些进程在重启过程中没有被启动起来。这个现象本身也说明这些进程不是必要的。

Author: halberd

Created: 2019-06-22 Sat 02:25

Validate

Oracle 必要的后台进程的更多相关文章

  1. Oracle 体系结构三 后台进程

    实例后台进程在启动实例时启动,在终止实例时终止运行. SMON SMON(system monitor)起初的任务是安装和打开数据.SMON通过查找和验证数据库控制文件来安装数据库.此后,它通过查找和 ...

  2. 关于Oracle数据库后台进程

    为了最大限度地提高性能并适应许多用户,多进程Oracle数据库系统使用后台进程.后台进程将合并功能,否则这些功能将由运行于每个用户进程的多个数据库程序处理.后台进程异步执行I / O并监视其他Orac ...

  3. 实验,暂停oracle后台进程

    有时出于测试需求,需要暂停oracle的某些后台进程,此时以暂停lgwr进程为例 使用sysdba连接到数据库查询到LGWR进程的PID:SQL> select prc.pid from v$b ...

  4. 【ora10,4】oracle后台进程介绍:

    一.SMON(System MONitor) 系统监控进程:      在数据库启动过程中,SMON排在CKPT进程之后,在Oracle9i中排在第六号的位置: PMON started with p ...

  5. Oracle数据库的链接数目超标

    测试场景:Oracle数据库的链接数目超标,iServer是否自动连接. 测试步骤:(1)设置了最大连接数为85,oracle后台进程有83:(2)开启3台iserver(A,B,C)A,B发布tes ...

  6. Oracle学习笔记一 初识Oracle

    数据库简介 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.SQL 是 Structured Query Language(结构化查询语言)的首字母缩写词. 定义 数据库,简单来 ...

  7. Oracle入门

    一.Oracle数据库简介 Oracle数据库的主要特点 :支持多用户.大事务量的事务处理:数据安全性和完整性控制:支持分布式数据处理:可移植性. Oracle数据库基于客户端/服务器技术:数据库服务 ...

  8. Oracle体系结构详解

    对于一门技术的学习,尤其是像Oracle database这种知识体系极其庞杂的技术来讲,从宏观上了解其体系结构是至关重要的.同时,个人认为,未必是专业DBA人员才需要了解其体系结构(固然对于数据库专 ...

  9. oracle 体系结构

    oracle 体系结构 数据库的体系结构是指数据库的组成.工作过程与原理,以及数据在数据库中的组织与管理机制. 1. oracle工作原理: 1).在数据库服务器上启动Oracle实例:2).应用程序 ...

随机推荐

  1. Swift 函数式数据结构 - 链表

    本文将使用Swift实现一个标准链表,在实现的过程中,遵守函数式编程的规则,无副作用,可以看到和C语言的实现还是有较大的差异. 预备知识 enum 的各种用法 swift的基本的模式匹配( patte ...

  2. deep_learning_Function_ lambda函数详解

    这里总结了关于 Python 中的 lambda 函数的“一个语法,三个特性,四个用法”. 一个语法: 在 Python 中,lambda 函数的语法是唯一的.其形式如下: lambda argume ...

  3. linux基础—课堂随笔010_系统启动和内核管理

    系统启动和内核管理 Linux: kernel+rootfs kernel: 进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs:程序和glibc 库:函数集合, functio ...

  4. C++第四次作业--继承与派生

    C++ 继承 面向对象程序设计中最重要的一个概念是继承.继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易.这样做,也达到了重用代码功能和提高执行效率的效果. 当创建一个类时 ...

  5. Introduction to Restricted Boltzmann Machines

    转载,原贴地址:Introduction to Restricted Boltzmann Machines,by Edwin Chen, 2011/07/18. Suppose you ask a b ...

  6. zencart批量插入TEXT文本属性attributes

    有时候上传的产品与多级分类比较多,在后台添加文本属性如Name,Number等需要顾客自定义的内容就比较费神了.现在只需将以下代码保存为insert_attributes.php,变量$options ...

  7. 网卡绑定(bonding)

    就是将多块网卡绑定同一IP地址对外提供服务,可以实现高 可用或者负载均衡.当然,直接给两块网卡设置同一IP地址 是不可能的.通过bonding,虚拟一块网卡对外提供连接, 物理网卡的被修改为相同的MA ...

  8. 【技巧 二进制分组】bzoj4398: 福慧双修&&2407: 探险

    二进制分组也可以说是一种比较优美的拆贡献方式吧? Description 菩萨为行,福慧双修,智人得果,不忘其本.——唐朠立<大慈恩寺三藏法师传>有才而知进退,福慧双修,这才难得.——乌雅 ...

  9. mac 环境下Android 反编译源码

    mac环境下Android 反编译 一.需要的工具 apktool:反编译APK文件,得到classes.dex文件,同时也能获取到资源文件以及布局文件. dex2jar:将反编译后的classes. ...

  10. hive 汇率拉链表转日连续流水表

    1.什么是拉链表 拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史.记录一个事物从开始,一直到当前状态的所有变化的信息. 我们先看一个示例,这就是一张拉链表,存储的 ...