第 1 章 数据库的启动和关闭
通常所说的 Oracle Server 主要由两个部分组成:Instance 和 Database。Instance 是指一组
后台进程(在 Windows 上是一组线程)和一块共享内存区域;Database 是指存储在磁盘上的
一组物理文件。通过 Instance 与 Database 协同,Oracle 数据库才能形成一个动态的可访问关系
型数据库系统。
本章将由数据库如何启动与关闭入手,开始和大家一起进入 Oracle 数据库的国度。
1. 数据库的启动
从表象来看,数据库的启动极其简单,只需要以 SYSDBA/SYSOPER 身份登陆,敲一条
startup 命令既可启动数据库。然而在这条命令之后,Oracle 需要执行一系列复杂的操作,深入
理解这些操作不仅有助于了解 Oracle 数据库的运行机制,还可以在故障发生时帮助大家快速
的定位问题的根源所在,所以接下来让我们一起分析一下数据库的启动过程。
Oracle 数据库的启动主要包含三个步骤:
u 启动数据库到 Nomount 状态
u 启动数据库到 Mount 状态
u 启动数据库到 Open 状态
完成这三个过程,数据库才能进入就绪状态,准备ᨀ供数据访问。图 1-1 ᧿述了一个数据
库从关闭状态(shutdown)到 OPEN 状态经历的这些步骤(关闭步骤与此相反,是一个逆向
过程):
图 0-1-1 数据库的起停步骤
《深入解析 Oracle》
·2·
下面逐个来看看以上各个步骤的具体过程以及含义。
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 >*ferLoomomvL$inw*h u> selcmc<c
2vv;BovBvAuuo;QN2uuuuuuuuER-;v2-Nvvu> selcmc<c
O> selcal>eslD>bru1hgpdulbuBslud.06P='Ck.q'M1hgM> selc
B Yb BbBB<uuou> selcu*1suoToRvoRvRu8fluuNuoTQoAuM> selcMt >*ferMoomomvM1hgM> selcu
c34lcBMD>,cM> selcdulbuBlud.06P='Ck.q'M1hgM> selc
B Yb BbBB<muou> selcu>hgbrsllu2EoRooEEE qs uo%u2AQNvuM> selcMt >*ferMo2momvM1hgM> selc
在 Unix/Linux 上可以通过 file 命令查看 oracle 执行文件来判断 Oracle 是 64 位或是 32 位
的,以下是 Linux 平台的一个示范输出,输出显示 Oracle 为 32 位:
O> selcal>eslD>bru1hgpduGhlcud.06P='Ck.q'M1hgM> selc
M>trM> selcMt >*ferMoomomvM1hgM> selcQubcrfh*ubcr4h*u'=IuA2B1hru=9$uc<cefrs1lc-uigrclu
EvAE%-u7c bh>guou59x9KV-uG> uynUM=hgf<u2m2mT-u*3gs,hesll3ulhg/c*u5fbcbubDs c*ulh1bV-ug>ru
br httc*
在 Windows 上,也有可选的命令增强工具可以ᨀ供类似的功能。由于 32 位的 Oracle 数
据库,最多只能使用约 1.7G 的内存,会极大约束 Oracle 的性能,在生产环境中,应当使用 64
位系统,部署 64 位的 Oracle 数据库。
了解 Oracle 可执行文件还有另外一个用途,在 Unix/Linux 上通过 strings 命令可以将 oracle
可执行文件中的字符文本转储出来,在转储的文本中可以找到很多有意思的信息,比如一些
Oracle 未公开的 Hints 信息、数据库字典基表创建信息等,类似如下一条命令可以完成这样的
工作:
strings $ORACLE_HOME/bin/oracle > oracle.txt
比如如下命令显示了源码中和 Oracle Database 12c 新特性 Pluggable 数据库相关的一些信
息:
c34lcBMD>,cM> selcdu4 ctuBhutlf44s1lcu> selcmr<r:,> c
_lf44s1lcuSsrs1sbcu.tcgMPl>bc
_lf44s1lcuSsrs1sbc
第 1 章 数据库的启动和关闭
·3·
'gzfcfcuDcl*u13uG> c4 >fg*u> uS$(0ur>ub3geD >ghWcu*srs1sbcu,>fgrM>tcgu> utlf44s1lcu*srs1sbcu
>tcguYhrDu>rDc u>tc srh>gb
93geD >ghWcutlf44s1lcu*srs1sbcu>tcgMel>bc
Ccgs1lcCtlf44s1lcC*srs1sbc 'gs1lcu_lf44s1lcuSsrs1sbc
Ctlf44s1lcC*srs1sbcC*c1f4uuu'gs1lcueDce/hg4u>Gutlf44s1lcu*srs1sbcuiSuhgu c*>
Sc1f4uGls4uG> utlf44s1lcu*srs1sbcu clsrc*u>tc srh>gb
tlf44s1lcu*srs1sbcu>tcg
tlf44s1lcu*srs1sbcuel>bc
_lf44s1lcu*srs1sbcu cbcrl>4b
P>> *hgsrcutlf44s1lcu*srs1sbcu>tc srh>gb
_lf44s1lcuSsrs1sbcuIhlcuP>t3
_=Uyy6$='CS6)6$69'
_lf44s1lcu*srs1sbc
Ugbftt> rc*u0>ll1se/u9c4,cgrMUg*>u)s1lcbtsecu>tc srh>guhbbfc*u5sg* h4g> c*Vuhgusu_lf44s1lcu
Ssrs1sbcug
在 Oracle 10g 的版本中,某位程序员甚至引入了一段英国 Radiohead 乐队 Creep 这首歌
的歌词,他说他不属于这里:
Oc34lcaDtbc 7c 2uXpdubr hg4bud.06P='Ck.q'M1hgM> selcu:4 ctu s*h>Dcs*
iJ,usue cct-uiJ,usuYhggc -uYDsrurDcuDcllus,uiu*>hg4uDc cmiu*>gJru1cl>g4uDc cuB s*h>Dcs*
当然在后续版本中,这段表白被去除了。
1.1.2. 实例以及进程的创建
在 Nomount 初始化的过程中,只要拥有了一个参数文件,就可以凭之启动实例
(INSTANCE),这一步骤并不需要任何控制文件或数据文件等的参与。以下是在 Linux 平台上
正常启动实例到 nomount 状态的过程:
c34lcBMD>,cM> selcduc<t> ru.06P='C9iS[c34lc
c34lcBMD>,cM> selcduceD>u]*1Cgs,c[c34lc]uwud.06P='Ck.q'M*1bMhghrc34lcm> s
c34lcBMD>,cM> selcdubzltlfbu]Musbub3b*1s]
9#=H_lfbQu0clcsbcuo2momvmvmou$crsu>gu)Dfu8fguoNuo%QTRQARu2vo2
P>t3 h4Dru5eVuoRE2-u2vo2-u. selcmuu6llu h4Drbu cbc 7c*m
P>ggcerc*ur>usguh*lcuhgbrsgecm
9#=wubrs rftug>,>fgrF
.06P='uhgbrsgecubrs rc*m
)>rslu93brc,uyl>1slu6 csuu2AEvANRNN 13rcb
《深入解析 Oracle》
·4·
Ih<c*u9hWc uuuu22;2ENvu13rcb
Ks hs1lcu9hWc uuoEvATTTo2u13rcb
Ssrs1sbcu$fGGc b uuuTvAAo%NEu13rcb
0c*>u$fGGc b uuuuTv;NRNNu13rcb
注意观察,Oracle 根据参数文件的内容,创建了 instance,分配了相应的内存区域,启动了
相应的后台进程。SGA 的分配信息从以上输出中可以看到。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
800次阅读
2025-04-18 14:18:38
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
602次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
551次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
536次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
511次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
503次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
473次阅读
2025-04-17 09:30:30
OR+DBLINK的关联SQL优化思路
布衣
386次阅读
2025-05-05 19:28:36
Oracle数据库Hint大全,31个使用案例,速来下载!
陈举超
371次阅读
2025-04-16 21:25:19
Oracle19C低版本一天遭遇两BUG(ORA-04031/ORA-00600)
潇湘秦
334次阅读
2025-04-16 17:05:16