• 5.数据库的启动和关闭01


    1.前言

      通常来说Oracle server 主要由两个部分组成:instance和database. instance是指一组后台进程(在window上是一组线程)和一块共享内存区域,database是指存储在磁盘上的一组物理文件,通过instance与database协同,Oracle数据库才能形成一个动态的可访问关系型数据库系统。

    2.数据的启动

      oracle的数据库的启动不是仅仅看表象用sysdba/sysoper身份登录然后输入startup命令即可启动数据库。其实往往当执行startup之后,Oracle需要执行一系列的复杂的操作。

      Oracle数据库的启动主要包括3个过程:

    • 启动数据库到nomount状态;
    • 启动数据库到mount状态;
    • 启动数据库到open状态;  

      完成这3个过程,数据库才能进入就绪状态,准备提供数据访问。

    3.启动数据库到nomount状态的过程

      在启动的第一步,Oracle首先寻找参数文件(pfile/spfile),然后根据参数文件中的设置(内存分配等设置),创建实例(instance),分配内存,启动后台进程,Nomount的过程也就是启动数据库实例的过程,这个过程在后台是启动oracle可执行程序的过程,window上是oracle.exe文件的初始化,在unix/linux上是oracle可执行文件的初始化。

      在linux中可以通过file命令查看oracle执行文件来判断oralce是64位或者是32位 

    [oracle@node04 dbs]$ file $ORACLE_HOME/bin/oracle
    /data/oracle/product/11.2.0/db_1/bin/oracle: setuid setgid ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=af262d40ee8c98c737770f1d9685cc6de14bb355, not stripped

      查看数据库启动文件位置 

    SQL> show parameter spfile;
    
    NAME                     TYPE                 VALUE
    ------------------------------------ ---------------------- ------------------------------
    spfile                     string            /data/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora

      通常默认用的是spfile启动,spfile是一个二进制文件,一般我们可以用strings命令进行查看: strings   spfileorcl.ora

      在nomount初始化过程中,只要拥有一个参数文件,就可以凭之启动实例(instance),这一步骤并不需要任何的控制文件或者数据文件参与。

      以下是正常情况下启动数据库到nomount状态的过程: 

    SQL> startup  nomount
    ORACLE instance started.
    
    Total System Global Area  759943168 bytes
    Fixed Size            2217224 bytes
    Variable Size          473959160 bytes
    Database Buffers      276824064 bytes
    Redo Buffers            6942720 bytes

      注意这里,oracle根据参数文件的内容,创建了instance,分配了相应的内存区域,启动了相应的后台进程,SGA的分配信息从以上的输出中可以看到。

      观察告警日志(alert_<oracle_SID>.log),可以看到这一阶段的启动过程,读取参数文件,应用参数启动实例,所有在参数文件中定义的非缺省参数都会记录在告警日志文件中,启动告警日志的文件可以通过命令:   

    SQL> show parameter background_dump_dest;

    NAME               TYPE       VALUE
    ------------------------------------ ---------------------- ------------------------------
    background_dump_dest       string     /data/oracle/diag/rdbms/orcl/orcl/trace

     这里我们可以通过该alert_<oracle_sid>.log,可以看到这一阶段启动的过程,读取参数文件,应用参数启动实例,所有在参数文件中

    Fri Sep 17 17:42:08 2021
    Starting ORACLE instance (normal)
    LICENSE_MAX_SESSION = 0
    LICENSE_SESSIONS_WARNING = 0
    Picked latch-free SCN scheme 3
    Using LOG_ARCHIVE_DEST_1 parameter default value as USE_DB_RECOVERY_FILE_DEST
    Autotune of undo retention is turned on.
    IMODE=BR
    ILAT =27
    LICENSE_MAX_USERS = 0
    SYS auditing is disabled
    Starting up:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options.
    Using parameter settings in server-side spfile /data/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora
    System parameters with non-default values:
      processes                = 150
      memory_target            = 728M
      control_files            = "/data/oracle/oradata/orcl/control01.ctl"
      control_files            = "/data/oracle/flash_recovery_area/orcl/control02.ctl"
      db_block_size            = 8192
      db_16k_cache_size        = 12M
      compatible               = "11.2.0.0.0"
      db_recovery_file_dest    = "/data/oracle/flash_recovery_area"
      db_recovery_file_dest_size= 3882M
      undo_tablespace          = "UNDOTBS1"
      remote_login_passwordfile= "EXCLUSIVE"
      db_domain                = ""
      dispatchers              = "(PROTOCOL=TCP) (SERVICE=orclXDB)"
      local_listener           = "LISTENER_ORCL"
      audit_file_dest          = "/data/oracle/admin/orcl/adump"
      audit_trail              = "DB"
      db_name                  = "orcl"
      open_cursors             = 300
      diagnostic_dest          = "/data/oracle"

    应用参数创建实例之后,后台进程依次启动,注意以下输出中包含了PID以及OS ID两个信息,PID代表该进程在数据库内部的标识符编号,而OS ID则代表该进程在操作系统上的进程编号:

    Fri Sep 17 17:42:09 2021
    PMON started with pid=2, OS id=86062
    Fri Sep 17 17:42:09 2021
    VKTM started with pid=3, OS id=86064
    VKTM running at (100ms) precision
    Fri Sep 17 17:42:09 2021
    GEN0 started with pid=4, OS id=86068
    Fri Sep 17 17:42:09 2021
    DIAG started with pid=5, OS id=86070
    Fri Sep 17 17:42:09 2021
    DBRM started with pid=6, OS id=86072
    Fri Sep 17 17:42:09 2021
    PSP0 started with pid=7, OS id=86074
    Fri Sep 17 17:42:09 2021
    DIA0 started with pid=8, OS id=86076
    Fri Sep 17 17:42:09 2021
    MMAN started with pid=9, OS id=86078
    Fri Sep 17 17:42:09 2021
    DBW0 started with pid=10, OS id=86080
    Fri Sep 17 17:42:09 2021
    LGWR started with pid=11, OS id=86082
    Fri Sep 17 17:42:09 2021
    CKPT started with pid=12, OS id=86084
    Fri Sep 17 17:42:09 2021
    SMON started with pid=13, OS id=86086
    Fri Sep 17 17:42:09 2021
    RECO started with pid=14, OS id=86088
    Fri Sep 17 17:42:09 2021
    MMON started with pid=15, OS id=86090
    Fri Sep 17 17:42:09 2021

    这个关系我们也可以通过视图v$process查询到

    select addr,pid,spid,username,program from v$process;      --这里的pid是数据库内部的标识符编号,而spid则代表该进程在操作系统上的编号

      如果在操作系统上发现某个进程表现异常(如占用很高的cpu资源),那么通过操作系统上的PID和v$process视图中的SPID关联,就可以找到这个os上的进程在数据库内部的化身,从而进一步的跟踪诊断。

      

      

  • 相关阅读:
    bash特性
    FHS 层级文件系统
    环境变量的问题
    linux认识
    搜索引擎的使用
    nginx
    部署操作手册
    git
    添加tag
    pycharm中使用git
  • 原文地址:https://www.cnblogs.com/zmc60/p/15322257.html
Copyright © 2020-2023  润新知