zoukankan      html  css  js  c++  java
  • 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 案例两则

      后续补充。。。

          

  • 相关阅读:
    【性能优化】高效代码篇(一)
    【Code Tools】AB性能测试工具(一)
    【Mac】微信视频对方听不见你的声音
    【Maven错误】 Non-resolvable parent POM for ...... Return code is: 500 , ReasonPhrase:Internal Server Error. and 'parent.relativePath' points at no local POM @ line 14, column 11
    【Java字节码】Idea中查看Java字节码的插件jclasslib Bytecode viewer
    【分布式事务】分布式事务解决方案
    【分布式事务】浅谈分布式事务
    【RocketMQ异常】Caused by: com.aliyun.openservices.shade.com.alibaba.rocketmq.client.exception.MQClientException: No route info of this topic, message-service-topic-testf
    【Docker】docker安装redis
    SQLServer------远程调用失败
  • 原文地址:https://www.cnblogs.com/zmc60/p/15328425.html
Copyright © 2011-2022 走看看