通常所说的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:\app\administrator\diag\rdbms\orcl\orcl\trace --alert日志在这个路径下
core_dump_dest string d:\app\administrator\diag\rdbms\orcl\orcl\cdump
user_dump_dest string d:\app\administrator\diag\rdbms\orcl\orcl\trace

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_HOME\database目录。
可以在SQL*PLUS中通过show parameter spfile命令来检查数据库是否使用了spfile文件,如果value不为Null,则数据库使用了spfile文件。
在参数文件中,通常需要最少的参数是db_name ,设置了这个参数之后,数据库实例就可以启动。

SQL> show parameter spfile;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string D:\APP\ADMINISTRATOR\PRODUCT\1
1.2.0\DBHOME_1\DATABASE\SPFILE
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>

Oracle-nomount/mount/open的更多相关文章

  1. oracle startup mount nomount 区别

    看oracle入门书,其中一句话说,使用startup nomount 命令启动例程,不可以和mount open 和exclusive一起使用,这个命令适用于建立数据库或是维护数据库时使用. 于是查 ...

  2. 数据库nomount mount open阶段走向

    先来简要了解一下Oracle数据库体系架构以便于后面深入理解,Oracle Server主要由实例(instance)和数据库(database)组成.实例(instance)由共享内存(SGA)和后 ...

  3. Oracle第一步

    Oracle 启动数据库 Startup [NOMOUNT|MOUNT|OPEN|FORCE] [restrict] [pfile=filename] 启动实例,加载数据库,启动数据库 oRACLE关 ...

  4. Oracle 第一天

    Oracle 第一天 1.oracle数据库下载.安装和配置 1.1 下载压缩包后解压并将压缩包2里面的文件覆盖至压缩包1中 1.2 按照步骤逐步安装 1.3 设置管理员密码时,默认情况下四个管理员是 ...

  5. Oracle数据库——基本操作

    一.涉及内容 1.掌握Oracle 10g 相关服务的启动.停止. 2.熟练掌握数据库配置助手(DBA).企业管理器(OEM).SQL*Plus等工具的使用. 3.掌握使用STARTUP和SHUTDO ...

  6. Oracle 启动状态解说

    oracle 启动状态由nomount-mount-open 一. nomount状态下操作 08:09:49 idle> startup nomount; ORACLE instance st ...

  7. Oracle Standby Database 实现方案

    Oracle Standby Database 实现方案  From: http://wanow.blog.hexun.com/4672755_d.html 字号:大 中 小 版本:V20060328 ...

  8. centos6 x86 安装 oracle 11g2r 日志

    一.安装centos 6.5 二.安装ora所需的库 三.修改centos内核 四.建用户组和目录结构等 五.安装ora11g2r 六.安装sqlplus的翻页程序和help补丁 七.自启动脚本 八. ...

  9. centos5.2 x86 安装 oracle 11g2r 日志

    一.安装centos 二.安装ora所需的库 三.修改centos内核 四.建用户组和目录结构等 五.安装ora11g2r 六.安装sqlplus的翻页程序和help补丁 七.自启动脚本 八.常用命令 ...

  10. DBA避坑宝典:Oracle运维中的那些事儿

    对于Oracle运维中的那些事儿,我的最终目的:不是比谁更惨,而是能够从中吸取经验和教训. 从我的理解来看,我会从下面的几个方面来进行说明DBA运维中的一些事儿. 每个部分都是非常关键的,缺一不可,而 ...

随机推荐

  1. idmap_ad — Samba's idmap_ad Backend for Winbind《转载》

    Name idmap_ad — Samba's idmap_ad Backend for Winbind DESCRIPTION The idmap_ad plugin provides a way ...

  2. mysql主从同步报错

    主从不同步,经查看发现如下报错 Last_Errno: 1666 ​Last_Error: Error executing row event: 'Cannot execute statement: ...

  3. 转载: Javah生成JNI头文件出现找不到类的错误

    错误: 找不到 'com.chnic.jni.SayHellotoCPP' 的类文件. 上图可以看到错误和解决办法. 不要忘记那个点 javah -classpath . -jni com.chnic ...

  4. 未在本地计算机上注册"Microsoft.ACE.OLEDB.12.0"提供程序

    运行时出现了错误,提示未在本地计算机上注册"Microsoft.ACE.OLEDB.12.0"提供程序. 这个问题的原因是64位PC上安装了Office的32位版本,所以Micro ...

  5. unity绘制线和绘制面

    绘制线条代码,其实就是指定至少两个点,然后赋予贴图即可,不废话,上代码: using UnityEngine; using System.Collections; public class LineT ...

  6. hdu 验证角谷猜想 1279

    Problem Description 数论中有许多猜想尚未解决,其中有一个被称为"角谷猜想"的问题,该问题在五.六十年代的美国多个著名高校中曾风行一时,这个问题是这样描述的:任何 ...

  7. [总结]Map: C++ V.S. Java

    整理一下Map在Java 和 C++的基本操作,欢迎大家一起交流学习. 附: 对于在C++中,选用map 还是 unordered_map,可以参考这篇讨论.相对简单粗暴的结论是,unordered_ ...

  8. PHP基础语法随记

    PHP常量: 预定义常量: PHP自身也定义了大量的预定义常量,可以使用get_defined_constants()来查看,比较常用的预定义常量有: PHP_OS:PHP系统. PHP_VERSIO ...

  9. 网页中flash背景透明

    <embed src="文件路径" width="长度" height="宽度" quality="high" t ...

  10. Manasa and Stones

    from __future__ import print_function def main(): t = int(raw_input()) for _ in range(t): n = int(ra ...