• Oracle-nomount/mount/open


    通常所说的Oracle Server主要由两个部分组成:Instance和Database。Instance是指一组后台进程(在Windows上是一组线程)和一块共享内存区域;Database是指存储在磁盘上的一组物理文件。通过Instance与Database协同,Oracle数据库才能形成一个动态的可访问关系型数据库系统。
    =========
    1、Oracle数据库的启动主要包含三个步骤:

    启动数据库到Nomount状态

    启动数据库到Mount状态

    启动数据库到Open状态
    完成这三个过程,数据库才能进入就绪状态,准备提供数据访问
    =========
    2、启动数据库到Nomount状态
    在启动的第一步骤,Oracle首先寻找参数文件(pfile/spfile),然后根据参数文件中的设置(如内存分配等设置),创建实例(INSTANCE),分配内存,启动后台进程。Nomount的过程也就是启动数据库实例的过程。这个过程在后台是启动Oracle可执行程序的过程,Windows上是oracle.exe文件的初始化,在Unix/Linux上是oracle可执行文件的初始化。
    在Unix/Linux上可以通过file命令查看oracle执行文件来判断Oracle是64位或是32位的。
    [oracle@rusky ~]$ file /home/oracle/oracle/product/10.2.0/db_1/bin/oracle
    /home/oracle/oracle/product/10.2.0/db_1/bin/oracle: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs),
    not stripped
    SQL> startup nomount;
    3、观察告警日志文件(alert_<ORACLE_SID>.log),可以看到这一阶段的启动过程:读取参数文件,应用参数启动实例。所有在参数文件中定义的非缺省参数都会记录在告警日志文件中
    告警日志alert_<ORACLE_SID>.log的存放地点:

    SQL> show parameter dump_dest;
    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    background_dump_dest string d:appadministratordiag
    dbmsorclorcl	race   --alert日志在这个路径下
    core_dump_dest string d:appadministratordiag
    dbmsorclorclcdump 
    user_dump_dest string d:appadministratordiag
    dbmsorclorcl	race

    4、在Nomount初始化的过程中,只要拥有了一个参数文件,就可以凭之启动实例(INSTANCE),这一步骤并不需要任何控制文件或数据文件等的参与。在参数文件中,通常需要最少的参数是db_name ,设置了这个参数之后,数据库实例就可以启动。应用参数创建实例之后,后台进程依次启动。

    5、V$PROCESS视图
    通过数据库中的v$process视图,可以找到对应于操作系统的每个进程信息:

    SQL> select addr,pid,spid,username,program from v$process;
    SQL> select addr,pid,spid,username,program from v$process;
    
    ADDR PID SPID USERNAME PROGRAM
    ---------------- ---------- ------------------------ --------------- ------------------------
    000007FF31078C08 1 PSEUDO
    000007FF31079C78 2 5748 SYSTEM ORACLE.EXE (PMON)
    000007FF3107ACE8 3 6528 SYSTEM ORACLE.EXE (VKTM)
    000007FF3107BD58 4 4724 SYSTEM ORACLE.EXE (GEN0)
    000007FF3107CDC8 5 6104 SYSTEM ORACLE.EXE (DIAG)
    000007FF3107DE38 6 6456 SYSTEM ORACLE.EXE (DBRM)
    000007FF3107EEA8 7 7160 SYSTEM ORACLE.EXE (PSP0)
    000007FF3107FF18 8 4292 SYSTEM ORACLE.EXE (DIA0)
    000007FF31080F88 9 4180 SYSTEM ORACLE.EXE (MMAN)
    000007FF31081FF8 10 376 SYSTEM ORACLE.EXE (DBW0)
    000007FF31083068 11 6608 SYSTEM ORACLE.EXE (LGWR)
    000007FF310840D8 12 5088 SYSTEM ORACLE.EXE (CKPT) ....

    =============
    6、参数文件的选择
    接下来关注一下启动过程中Oracle选择参数文件的顺序。
    从Oracle9i开始,spfile被引入Oracle数据库,Oracle首选spfile<ORACLE_SID>.ora文件作为启动参数文件;如果该文件不存在,Oracle选择spfile.ora文件;如果前两者都不存在,Oracle将会选择init<ORACLE_SID>.ora文件;如果以上三个文件都不存在,Oracle将无法创建和启动instance。Oracle在启动过程中,会在特定的路径中寻找参数文件,在Unix/Linux下的路径为
    $ORACLE_HOME/dbs目录,在WINDOWS上的路径为$ORACLE_HOMEdatabase目录。
    可以在SQL*PLUS中通过show parameter spfile命令来检查数据库是否使用了spfile文件,如果value不为Null,则数据库使用了spfile文件。
    在参数文件中,通常需要最少的参数是db_name ,设置了这个参数之后,数据库实例就可以启动。

    SQL> show parameter spfile;
    
    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    spfile string D:APPADMINISTRATORPRODUCT1
    1.2.0DBHOME_1DATABASESPFILE
    ORCL.ORA

    ========================
    7、ORACLE SID
    SID是System IDentifier的缩写,而ORACLE_SID就是Oracle System IDentifier 的缩写,在Oracle系统中,ORACLE_SID以环境变量的形式出现,当Oracle实例启动时,在操作系统上fork的进程就依据这个ORACLE_SID来创建,这就是SID的作用。

    Oracle的实例(instance)是由一块共享内存区域(SGA)和一组后台进程(background processes)共同组成,而后台进程正是数据库和操作系统进行交互的通道,这些进程的名称就是通过ORACLE_SID决定的。
    通过前面的讨论可以知道,实例的启动需要一个参数文件,参数文件的名称就是由ORACLE_SID决定的,对于init文件,缺省的文件名称是init<ORACLE_SID>.ora,对于spfile文件,缺省的文件名为spfile<ORACLE_SID>.ora,Oracle依据ORACLE_SID来决定和寻找参数文件启动实例。
    在同一个$ORACLE_HOME下,通过参数文件,Oracle能够根据ORACLE_SID将实例区分开来;但是注意如果在不同的$ORACLE_HOME下,即使在同一台主机上,Oracle也是能够创建相同ORACLE_SID的实例的。

    8、INSTANCE_NAME的含义
    在数据库内部和ORACLE_SID相关联的概念就是INSTANCE_NAME。
    Oracle数据库内部存在一个初始化参数INSTANCE_NAME,用于标示数据库实例的名称,其缺省值通常就是ORACLE_SID;但是初始化参数INSTANCE_NAME和ORACLE_SID可以不同,不同实例可以拥有相同的INSTANCE_NAME。
    在同一个ORACLE_HOME下,只要ORACLE_SID不同,数据库并不校验INSTANCE_NAME参数;通过简单的参数文件复制,我们就可以在同一台服务器上创建多个具有相同instance_name的实例。
    V$INSTANCE视图和数据库实例的生命周期相关,用于显示当前实例的状态,通过这个视图可以获得包括实例的启动时间、运行主机等重要信息.

    <FROM:http://www.eygle.com/archives/2008/12/oracle_internals_startup_nomount.html>

  • 相关阅读:
    关于JAVA中RSA加签解签,私钥加密公钥解密和公钥加密私钥解密代码详解
    Vue使用总结
    使用ReflectionToStringBuilder实现toString方法
    vue 发送短信验证码倒计时
    个人信息打码
    Token注解防止表单的重复提交
    html选择图片后直接预览
    从分布式一致性谈到CAP理论、BASE理论
    node.js 下依赖Express 实现post 4种方式提交参数
    web前端学习笔记(CSS变化宽度布局)
  • 原文地址:https://www.cnblogs.com/rusking/p/4026678.html
Copyright © 2020-2023  润新知