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 案例两则

  后续补充。。。

      

原文地址:https://www.cnblogs.com/zmc60/p/15328425.html