启动数据库到NOMOUNT状态的过程

        在这个过程里,Oracle首先会根据一定的顺序寻找参数文件,然后根据参数文件中的设置,创建实例,分配内存,启动后台进程。NOMOUNT的过程也就是启动数据库实例的过程。
        在NOMOUNT初始化的过程中,只要拥有参数文件即可。这一步骤并不需要任何控制文件或者数据文件等的参与。
 
--***************************************************************************--
 
[oracle@localhost ~]$ sqlplus /nolog
 
SQL*Plus: Release 10.2.0.1.0 - Production on Fri Jul 13 09:27:21 2012
 
Copyright (c) 1982, 2005, Oracle. All rights reserved.
 
SQL> conn / as sysdba        
Connected to an idle instance.
SQL> startup nomount
ORACLE instance started.
 
Total System Global Area 524288000 bytes
Fixed Size 1220360 bytes
Variable Size 146800888 bytes
Database Buffers 373293056 bytes
Redo Buffers 2973696 bytes
 
--***************************************************************************--
 
Oracle会根据参数文件的内容,创建Instance,分配相应的内存区域,启动了相应的后台进程。
 
由于所有参数文件中定义的非缺省参数都会在告警日志中显示,那么我们想进一步了解,就可以观察告警日志文件。
 
--***************************************************************************--
 
Starting ORACLE instance (normal)
Cannot determine all dependent dynamic libraries for /proc/self/exe
Unable to find dynamic library libocr10.so in search paths
RPATH = /ade/aime1_build2101/oracle/has/lib/:/ade/aime1_build2101/oracle/lib/:/ade/aime1_build2101/oracle/has/lib/:
LD_LIBRARY_PATH is not set!
The default library directories are /lib and /usr/lib
Unable to find dynamic library libocrb10.so in search paths
Unable to find dynamic library libocrutl10.so in search paths
Unable to find dynamic library libocrutl10.so in search paths
LICENSE_MAX_SESSION = 0
LICENSE_SESSIONS_WARNING = 0
Picked latch-free SCN scheme 2
Using LOG_ARCHIVE_DEST_1 parameter default value as /u01/app/oracle/product/10.2.0/dbhome_1/dbs/arch
Autotune of undo retention is turned on. 
IMODE=BR
ILAT =132
LICENSE_MAX_USERS = 0
SYS auditing is disabled
ksdpec: called for event 13740 prior to event group initialization
Starting up ORACLE RDBMS Version: 10.2.0.1.0.
System parameters with non-default values:
  processes = 1000
  sessions = 1200
  __shared_pool_size = 138412032
  __large_pool_size = 4194304
  __java_pool_size = 4194304
  __streams_pool_size = 0
  sga_target = 524288000
  control_files = /u01/app/oracle/oradata/PROD/control01.ctl, /u01/app/oracle/oradata/PROD/control02.ctl, /u01/app/oracle/oradata/PROD/control03.ctl
  db_block_size = 8192
  __db_cache_size = 373293056
  compatible = 10.2.0
  undo_management = AUTO
  undo_tablespace = undotbs
  shared_servers = 3
  db_name = PROD
  open_cursors = 1024
  pga_aggregate_target = 367001600
 
--***************************************************************************--
 
可以看到这一阶段的启动过程:读取参数文件,应用参数启动实例。
 
--***************************************************************************--
 
PMON started with pid=2, OS id=31012
PSP0 started with pid=3, OS id=31014
MMAN started with pid=4, OS id=31016
DBW0 started with pid=5, OS id=31018
LGWR started with pid=6, OS id=31020
CKPT started with pid=7, OS id=31022
SMON started with pid=8, OS id=31024
RECO started with pid=9, OS id=31026
MMON started with pid=10, OS id=31028
MMNL started with pid=11, OS id=31030
 
--***************************************************************************--
 
        创建实例之后,后台进程会依次启动,输出中包含了PID和OS ID。PID代表该进程在数据库内部的标识符编号,而OS ID则代表该进程在操作系统上的进程标号。
        在告警日志的进程启动信息中,并没有包含pid=1的进程。在NOMOUNT的状态下,可以查询的系统视图。我们通过V$PROCESS验证pid=1的进程是否存在。
 
--***************************************************************************--        
--**  V$PROCESS记录了对应于操作系统的每个进程的相关信息。
--***************************************************************************--
 
SQL> col PROGRAM format a40
SQL> set linesize 120 pagesize 140 
SQL> select addr,pid,spid,program from v$process where pid =1;
 
ADDR PID SPID PROGRAM
-------- ---------- ------------ ----------------------------------------
3E6B1228 1 PSEUDO
 
--***************************************************************************--
--**  SPID列代表操作系统上的进程号。
--***************************************************************************--
  结果很明显,pid=1的进程是一个PSEUDO进程,这个进程是初始化数据库的进程,就是说它在其他进程启动之前就已经存在,并在数据库中一直存在。
 
这里还涉及一个问题,参数文件。Oracle是如何查找参数文件的呢?从Oracle9i开始,spfile被引入Oracle数据库,Oracle首选spfile<ORACLE_SID>.ora文件作为启动参数文件;若该文件不存在,Oracle选择spfile.ora文件;如果前两者都不存在,Oracle将会选择pfile<ORACLE_SID>.ora;若此文件也不存在,Oracle将会选择init<ORACLE_SID>.ora文件;若以上文件都不存在,Oracle将无法创建和启动Instance。在启动过程中,会在特定的路径中寻找参数文件,默认情况下LINUX/UNIX在$ORACLE_HOME/dbs目录,而Windows下则在$ORACLE_HOME/database目录。
 
--***************************************************************************--
 
SQL> show parameter spfile
 
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
 
--***************************************************************************--
--** 此值为空则不在使用spfile
--***************************************************************************--
 
PS:此过程只和参数文件有关.



转载于:https://www.cnblogs.com/nolanchan/archive/2012/07/22/8016318.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值