说说Oracle启动那些事儿,别光看理论,实际操作才真管用
- 问答
- 2026-01-13 14:50:20
- 1
某Oracle老DBA的实战笔记)
直接上干货吧,理论书上一大堆,咱就聊聊真动手时那点事儿,你打开电脑,连上服务器,准备启动Oracle数据库,第一步可不是急着敲那个startup命令。
第一关:找准你的“家”在哪儿(设置环境变量)
这步要是错了,后面全白搭,就像回家得先认对门牌号一样,你得告诉操作系统,你要玩的是哪个Oracle。(来源:多次踩坑后的教训)
- 先看看当前用户是谁:
whoami或者id看一眼,别用root用户瞎搞,通常都是用oracle这个软件安装用户。 - 设置关键环境变量:最主要的就是
ORACLE_SID(数据库实例名)和ORACLE_HOME(Oracle软件的安装目录),比如你的库叫orcl,家目录在/u01/app/oracle/product/19.0.0/dbhome_1,那就得这么设:export ORACLE_SID=orcl export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 export PATH=$ORACLE_HOME/bin:$PATH
通常老手都会有个现成的脚本,比如叫
oraenv,直接. oraenv然后输入SID就行,省事儿,这一步没做对,你后面执行sqlplus / as sysdba,它可能连的是另一个实例,或者直接报错。
第二关:开门前先听听动静(检查监听和进程)
门锁对了,还得听听屋里有没有动静,是不是已经有人在了。(来源:某次误启动导致冲突的惨痛经历)
- 看看数据库是不是已经起来了:别傻乎乎地重复启动,最简单粗暴的就是用
ps -ef | grep pmon命令,PMON是Oracle的一个核心后台进程,只要它在,说明实例很可能已经跑着了,你会看到一行像ora_pmon_orcl这样的进程,如果看到了,就别再startup了,否则会报错。 - 确认监听器在不在:监听器好比是数据库的“前台”,负责接待外面的客户端连接,数据库起来了,但监听没开,外面的人也连不进来,检查命令是
lsnrctl status,如果看到一堆信息说“监听器支持的服务……”里面有你的orcl,那就OK,如果没起来,得先lsnrctl start把监听启动起来。
第三关:进屋开灯,一步步来(启动数据库的三种模式)
终于到sqlplus / as sysdba连进去,准备startup了,但这启动可不是一步到位的,分三步走,像进屋先开廊灯,再开客厅灯,最后开大灯。(来源:Oracle官方文档的实践化理解)
-
startup nomount(拉电闸): 这个阶段,Oracle只做一件事:读取参数文件(pfile或spfile),根据参数文件里的设置,分配内存(SGA)并启动那些必要的后台进程(PMON、SMON等),这时候数据库本身还没被触碰,就像工厂通了电,但生产线还没开动。- 什么时候用? 通常是在创建新数据库、重建控制文件这种极端操作的时候,平时维护很少单独停在这步。
-
alter database mount;(打开总开关): 在nomount基础上,执行这个命令,这时候Oracle会去找到并打开控制文件,控制文件是数据库的“大脑”,记录了数据文件、日志文件等关键信息的位置和状态,数据库现在能“看到”自己的整体结构了,但用户还是不能访问,因为数据文件还没打开。- 什么时候用? 很多恢复操作必须在这个模式下做,对数据文件进行恢复,或者重命名数据文件,这时候你可以操作数据库的结构,但不能动里面的数据。
-
alter database open;(全线开工): 最后一步,Oracle根据控制文件的指引,去打开所有联机的数据文件和重做日志文件,如果这些文件都没问题,数据库就完全打开了,所有用户都可以正常连接和使用。- 常见坑点:如果这时候某个数据文件损坏或者丢失了,
open命令就会报错,停在这里,你就得进行恢复操作了。
- 常见坑点:如果这时候某个数据文件损坏或者丢失了,
第四关:碰上启动不了的幺蛾子怎么办(实战故障排查)
书上的启动一帆风顺,现实中却总幺蛾子不断。(来源:N次深夜救火的经验总结)
-
startup报错,说找不到参数文件。- 咋回事:最常见的就是
spfile丢了或者放的地方不对,Oracle默认会按一定顺序找(先是spfile,找不到再找pfile)。 - 怎么办:手动指定一个存在的参数文件启动:
startup pfile='/u01/app/oracle/product/19.0.0/dbhome_1/dbs/initorcl.ora',如果连pfile都没了,那就有点麻烦,可能得从备份重建,或者根据记忆手写一个最简单的先启动起来。
- 咋回事:最常见的就是
-
alter database open时,报某个数据文件需要恢复。- 咋回事:通常是数据库非正常关闭(比如服务器断电)后,有些数据还没写到磁盘上,需要靠重做日志来恢复。
- 怎么办:别慌,大多数情况下,Oracle自己能搞定,你先尝试一下自动恢复:
recover automatic database;,系统可能会自动应用日志,完事儿后你再alter database open;一般就成功了,如果自动恢复不行,它会提示你需要哪个归档日志,你再手动指定路径。
-
shutdown immediate关不掉,卡住了。- 咋回事:可能有会话(用户连接)死不退出,或者有事务没提交。
- 怎么办:别直接断电!可以尝试更强制的方式:
shutdown abort,这相当于强制断电,下次启动时,数据库肯定会需要进行恢复(由SMON进程自动完成),所以启动时会比平时慢一点,可能会看到类似“正在执行介质恢复……”的提示,等它自己完成就行。abort是杀手锏,别常用,但关键时刻能保命。
启动Oracle这事儿,理论是骨架,操作才是血肉,多动手练几次,尤其是故意制造点故障(在测试环境!),再想办法解决,比看十本书都管用,遇到问题别怕,一步步看报错信息,十有八九都能找到线索。

本文由酒紫萱于2026-01-13发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/79989.html
