第 1 章 数据库的启动和关闭
通常所说的 Oracle Server 主要由两个部分组成: Instance 和 Database。 Instance 是指一组
后台进程(在 Windows 上是一组线程) 和一块共享内存区域; Database 是指存储在磁盘上的
一组物理文件。 通过 Instance 与 Database 协同, Oracle 数据库才能形成一个动态的可访问关系
型数据库系统。
本章将由数据库如何启动与关闭入手,开始和大家一起进入 Oracle 数据库的国度。
- 数据库的启动
从表象来看,数据库的启动极其简单, 只需要以 SYSDBA/SYSOPER 身份登陆,敲一条
startup 命令既可启动数据库。 然而在这条命令之后, Oracle 需要执行一系列复杂的操作,深入
理解这些操作不仅有助于了解 Oracle 数据库的运行机制,还可以在故障发生时帮助大家快速
的定位问题的根源所在, 所以接下来让我们一起分析一下数据库的启动过程。
Oracle 数据库的启动主要包含三个步骤:
u 启动数据库到 Nomount 状态
u 启动数据库到 Mount 状态
u 启动数据库到 Open 状态
完成这三个过程,数据库才能进入就绪状态,准备提供数据访问。 图 1-1 描述了一个数据
库从关闭状态( shutdown)到 OPEN 状态经历的这些步骤(关闭步骤与此相反,是一个逆向
过程):

1.1启动数据库到 Nomount 状态
在启动的第一步骤, Oracle 首先寻找参数文件(pfile / spfile), 然后根据参数文件中的设置
(如内存分配等设置), 创建实例( INSTANCE), 分配内存, 启动后台进程。 Nomount 的过程
也就是启动数据库实例的过程。 这个过程在后台是启动 Oracle 可执行程序的过程, Windows
上是执行 oracle.exe 文件进行初始化,在 Unix/Linux 上是执行 oracle 可执行文件进行初始化。
1.1.1. Oracle 的可执行文件
Windows 上 Oracle 11g 的执行文件大小约为 86M,而 Linux 上 Oracle 11g 的执行文件达到
145M 左右,在 Oracle 12c 版本中, Oracle 可执行文件的大小达到了约 280M,由此可见不同
版本源码复杂度的增加:
SQL> selcLt >ferLoomomvLinw*h u> selcmcselcmc 3gs,hesll3ulhg/cu5fbcbubDs culh1bV-ug>ruselcal>eslD>bru1hgpdulbuBslud.06P='Ck.q'M1hgM> selcu B Yb BbBB selcu*1suoToRvoRvRu8fluuNuoTQoAuM> selcMt >*ferMoomomvM1hgM> selcu c34lcBMD>,cM> selcdulbuBlud.06P='Ck.q'M1hgM> selcu B Yb BbBB selcu>hgbrsllu2EoRooEEEuqs uo%u2AQNvuM> selcMt >*ferMo2momvM1hgM> selcu 在 Unix/Linux 上可以通过 file 命令查看 oracle 执行文件来判断 Oracle 是 64 位或是 32 位 的,以下是 Linux 平台的一个示范输出,输出显示 Oracle 为 32 位: O> selcal>eslD>bru1hgpduGhlcud.06P='Ck.q'M1hgM> selcu M>trM> selcMt >*ferMoomomvM1hgM> selcQubcrfh*ubcr4h*u'=IuA2B1hru=9uc<cefrs1lc-uigrclu
EvAE%-u7c bh>guou59x9KV-uG> uynUM=hgf<u2m2mT-u
br httc*u
在 Windows 上,也有可选的命令增强工具可以提供类似的功能。 由于 32 位的 Oracle 数
据库,最多只能使用约 1.7G 的内存,会极大约束 Oracle 的性能,在生产环境中,应当使用 64
位系统,部署 64 位的 Oracle 数据库。
1.1.2. 实例以及进程的创建
在 Nomount 初 始 化 的 过 程 中 , 只 要 拥 有 了 一 个 参 数 文 件 , 就 可 以 凭 之 启 动 实 例
(INSTANCE),这一步骤并不需要任何控制文件或数据文件等的参与。 以下是在 Linux 平台上
正常启动实例到 nomount 状态的过程:
c34lcBMD>,cM> selcduc
c34lcBMD>,cM> selcduceD>u]1Cgs,c[c34lc]uwud.06P='Ck.q’M1bMhghrc34lcm> su
c34lcBMD>,cM> selcdubzltlfbu]Musbub3b1s]u
9#=H_lfbQu0clcsbcuo2momvmvmou$crsu>gu)Dfu8fguoNuo%QTRQARu2vo2u
P>t3 h4Dru5eVuoRE2-u2vo2-u. selcmuu6llu h4Drbu cbc 7cmu
u
P>ggcercur>usguhlcuhgbrsgecmu
u
9#=wubrs rftug>,>fgrFu
.06P='uhgbrsgecubrs rc*mu
u
)>rslu93brc,uyl>1slu6 csuu2AEvANRNNu13rcbu
注意观察, Oracle 根据参数文件的内容,创建了 instance,分配了相应的内存区域,启动了
相应的后台进程。 SGA 的分配信息从以上输出中可以看到。
观察告警日志文件( alert_<ORACLE_SID>.log), 可以看到这一阶段的启动过程: 读取参
数文件,应用参数启动实例。 所有在参数文件中定义的非缺省参数都会记录在告警日志文件
中,
从 Oracle 不同版本中的变化来体会 Oracle 的技术进步、甚至借鉴这些变化是学习
Oracle 的方法之一。任何细微的变化都值得注意, 认真、细致、严谨是对 DBA 的基本素质
要求。




