zoukankan      html  css  js  c++  java
  • 启动数据库到NOMOUNT状态的过程

            在这个过程里,Oracle首先会根据一定的顺序寻找参数文件,然后根据参数文件中的设置,创建实例,分配内存,启动后台进程。NOMOUNT的过程也就是启动数据库实例的过程。
            在NOMOUNT初始化的过程中,只要拥有参数文件即可。这一步骤并不需要任何控制文件或者数据文件等的参与。
     
    --***************************************************************************--
     
    [oracle@localhost ~]$ sqlplus /nolog
     
    SQL*Plus: Release 10.2.0.1.0 - Production on Fri Jul 13 09:27:21 2012
     
    Copyright (c) 1982, 2005, Oracle. All rights reserved.
     
    SQL> conn / as sysdba        
    Connected to an idle instance.
    SQL> startup nomount
    ORACLE instance started.
     
    Total System Global Area 524288000 bytes
    Fixed Size 1220360 bytes
    Variable Size 146800888 bytes
    Database Buffers 373293056 bytes
    Redo Buffers 2973696 bytes
     
    --***************************************************************************--
     
    Oracle会根据参数文件的内容,创建Instance,分配相应的内存区域,启动了相应的后台进程。
     
    由于所有参数文件中定义的非缺省参数都会在告警日志中显示,那么我们想进一步了解,就可以观察告警日志文件。
     
    --***************************************************************************--
     
    Starting ORACLE instance (normal)
    Cannot determine all dependent dynamic libraries for /proc/self/exe
    Unable to find dynamic library libocr10.so in search paths
    RPATH = /ade/aime1_build2101/oracle/has/lib/:/ade/aime1_build2101/oracle/lib/:/ade/aime1_build2101/oracle/has/lib/:
    LD_LIBRARY_PATH is not set!
    The default library directories are /lib and /usr/lib
    Unable to find dynamic library libocrb10.so in search paths
    Unable to find dynamic library libocrutl10.so in search paths
    Unable to find dynamic library libocrutl10.so in search paths
    LICENSE_MAX_SESSION = 0
    LICENSE_SESSIONS_WARNING = 0
    Picked latch-free SCN scheme 2
    Using LOG_ARCHIVE_DEST_1 parameter default value as /u01/app/oracle/product/10.2.0/dbhome_1/dbs/arch
    Autotune of undo retention is turned on. 
    IMODE=BR
    ILAT =132
    LICENSE_MAX_USERS = 0
    SYS auditing is disabled
    ksdpec: called for event 13740 prior to event group initialization
    Starting up ORACLE RDBMS Version: 10.2.0.1.0.
    System parameters with non-default values:
      processes = 1000
      sessions = 1200
      __shared_pool_size = 138412032
      __large_pool_size = 4194304
      __java_pool_size = 4194304
      __streams_pool_size = 0
      sga_target = 524288000
      control_files = /u01/app/oracle/oradata/PROD/control01.ctl, /u01/app/oracle/oradata/PROD/control02.ctl, /u01/app/oracle/oradata/PROD/control03.ctl
      db_block_size = 8192
      __db_cache_size = 373293056
      compatible = 10.2.0
      undo_management = AUTO
      undo_tablespace = undotbs
      shared_servers = 3
      db_name = PROD
      open_cursors = 1024
      pga_aggregate_target = 367001600
     
    --***************************************************************************--
     
    可以看到这一阶段的启动过程:读取参数文件,应用参数启动实例。
     
    --***************************************************************************--
     
    PMON started with pid=2, OS id=31012
    PSP0 started with pid=3, OS id=31014
    MMAN started with pid=4, OS id=31016
    DBW0 started with pid=5, OS id=31018
    LGWR started with pid=6, OS id=31020
    CKPT started with pid=7, OS id=31022
    SMON started with pid=8, OS id=31024
    RECO started with pid=9, OS id=31026
    MMON started with pid=10, OS id=31028
    MMNL started with pid=11, OS id=31030
     
    --***************************************************************************--
     
            创建实例之后,后台进程会依次启动,输出中包含了PID和OS ID。PID代表该进程在数据库内部的标识符编号,而OS ID则代表该进程在操作系统上的进程标号。
            在告警日志的进程启动信息中,并没有包含pid=1的进程。在NOMOUNT的状态下,可以查询的系统视图。我们通过V$PROCESS验证pid=1的进程是否存在。
     
    --***************************************************************************--        
    --**  V$PROCESS记录了对应于操作系统的每个进程的相关信息。
    --***************************************************************************--
     
    SQL> col PROGRAM format a40
    SQL> set linesize 120 pagesize 140 
    SQL> select addr,pid,spid,program from v$process where pid =1;
     
    ADDR PID SPID PROGRAM
    -------- ---------- ------------ ----------------------------------------
    3E6B1228 1 PSEUDO
     
    --***************************************************************************--
    --**  SPID列代表操作系统上的进程号。
    --***************************************************************************--
      结果很明显,pid=1的进程是一个PSEUDO进程,这个进程是初始化数据库的进程,就是说它在其他进程启动之前就已经存在,并在数据库中一直存在。
     
    这里还涉及一个问题,参数文件。Oracle是如何查找参数文件的呢?从Oracle9i开始,spfile被引入Oracle数据库,Oracle首选spfile<ORACLE_SID>.ora文件作为启动参数文件;若该文件不存在,Oracle选择spfile.ora文件;如果前两者都不存在,Oracle将会选择pfile<ORACLE_SID>.ora;若此文件也不存在,Oracle将会选择init<ORACLE_SID>.ora文件;若以上文件都不存在,Oracle将无法创建和启动Instance。在启动过程中,会在特定的路径中寻找参数文件,默认情况下LINUX/UNIX在$ORACLE_HOME/dbs目录,而Windows下则在$ORACLE_HOME/database目录。
     
    --***************************************************************************--
     
    SQL> show parameter spfile
     
    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    spfile string
     
    --***************************************************************************--
    --** 此值为空则不在使用spfile
    --***************************************************************************--
     
    PS:此过程只和参数文件有关.



  • 相关阅读:
    WPF 之 布局(一)
    CSS 之 内层div填充margin,外层div的背景色不会覆盖该margin
    T-SQL 之 多表联合更新
    jQuery
    Joomla, Wordpress, Drupal 全面详细Pk比较-转载
    js ==与===区别(两个等号与三个等号)
    Jquery DataTables 自定义布局sdom
    Jquery DataTable
    解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in
    firedebug调试Jquery
  • 原文地址:https://www.cnblogs.com/nolanchan/p/8016318.html
Copyright © 2011-2022 走看看