• 6.数据库的启动和关闭02


    1.前言

      上面一章主要介绍了数据库在nomount阶段中的一些日志文件以及v$process视图,可以通过操作系统的pid和v$process视图中的spid关联,就可以找到这个os上的进程在数据库内部的化身,从而可以进一步的跟踪诊断。

    2.参数文件的选择(spfile<ORACLE_SID>.ora -->spfile.ora-->init<ORACLE_SID>.ora)

      在oracle启动的过程中参数文件的顺序是:首选的是spfile<ORACLE_SID>.ora文件作为启动参数文件,如果该文件不存在,Oracle选择spfile.ora文件;如果前两者都不存在,Oracle将会选择init<ORACLE_SID>.ora文件;如果以上3个文件都不存在,Oracle将无法创建和启动instance,在oracle启动过程中,会在特定的路径中寻找参数文件,在unix/linux下的路径为$ORACLE_HOME/dbs目录下,在Windows上的路径为$ORACLE_HOMEdatabase目录下。

      可以在sql*plus中通过show parameter spfile命令来检查数据库是否使用了spfile文件,如果value为Null,则数据库使用了spfile文件 

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

       其实这里/data/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora 等价与 ?/dbs/spfile@.ora       这里的?相当于$ORACLE_HOME   @相当于$ORACLE_SID

       如果这3个文件都不存在,Oracle将无法启动报错: 

    SQL> startup
    ORA-01078: failure in processing system parameters
    LRM-00109: could not open parameter file '/data/oracle/product/11.2.0/db_1/dbs/initorcl.ora'

      注意这里出现的错误提示,报告无法找到参数文件 init<ORACLE_SID>.ora,这正是oracle在启动过程中最后一个查找的参数文件。

      首先,因为spfile文件是二进制文件,我们可以通过strings 命令进行查看,也可以通过spfile文件创建pfile文件,也可以通过pfile创建spfile文件

      create spfile from pfile         #执行完这个命令后我们会发现在$ORACLE_HOME/dbs目录下生成一个init<$ORACLE_SID>.ora文件

    create pfile from spfile
     

               ?/dbs/spfile@.ora   ---> ?/dbs/spfile.ora  ---> ?/dbs/init@.ora

    3.实例启动最小参数需求

      在参数文件中,通常需要最少的参数是DB_NAME,设置了这个参数之后,数据库实例就可以启动了

    4.ORACLE_SID的含义 

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

      oracle的实例(instance)是由一块共享内存区域(SGA)和一组后台进程(Background Processes)共同组成,而后台进程正是数据库和操作系统进行交互的通信,这些进程的名称就是通过ORACLE_SID决定的。

    5.instance_name的含义

      oracle数据库内部存在一个初始化参数instance_name,用于标识数据库实例的名字,其缺省值通常就是oracle_sid;但是初始化参数instance_name和oracle_sid可以不同,不同的实例可以拥有相同的instance_name.

    6.db_name和instance_name

      相较于instance_name而言,db_name显然是更重要的,db_name代表了实例即将挂接的数据库名称,关系到具体的物理文件,通常缺省的数据库instance_nanme和db_name可以设置一致(在RAC环境中,因为多个实例对应一个数据库,因此instance_name和db_name不同)

    7.Nomount 案例两则

      后续补充。。。

          

  • 相关阅读:
    web全栈第四讲:后端框架express.js初步体验。
    web全栈第三讲:Angular单页面应用
    Web第六讲:HTML基础
    关于命令模式的一点意见
    黑猫白猫读《大话设计模式》
    排序二叉树的实现和我的一个数据结构设计
    《算法与数据结构C语言描述》优先队列
    《算法与数据结构C语言描述》里的农夫过河
    读《算法与数据结构c语言描述》
    《算法与数据结构C语言描述》里的求多项达式值
  • 原文地址:https://www.cnblogs.com/zmc60/p/15328425.html
Copyright © 2020-2023  润新知