作为一名数据库爱好者和 优快云 博主,我深知 Oracle 数据库的启动与关闭对于新手来说如同打开一个精密仪器的黑匣子。看似简单的 startup 和 shutdown 命令背后,隐藏着数据库内核的复杂运作机制。今天这篇文章,我将用最通俗的语言,结合生活化比喻和实战案例,带大家彻底搞懂 Oracle 实例启停的每一个细节,让新手也能轻松入门,让业内人士也能温故知新。
1. 数据库启动过程(三阶段)
Oracle 数据库的启动就像一场精心编排的交响乐,需要经历 nomount→mount→open 三个递进阶段,每个阶段都有其独特的使命和关键文件的联动。
核心文件说明
Oracle 数据库启动依赖三类核心文件,它们之间的关系就像我们日常生活中的导航系统:
-
初始化参数文件:相当于导航系统的“配置文件”,记录着控制文件的路径,是启动实例的基础。没有它,数据库就像失去了地图的导航,不知道从何开始。
-
控制文件:如同导航系统中的“实时路况中心”,记录着数据文件和重做日志文件的存储路径,是连接实例与数据库文件的桥梁。有了它,数据库才能准确找到各个数据文件的位置。
-
数据文件 + 重做日志文件:这就好比我们的“目的地”和“行车记录仪”。数据文件存储着实际业务数据,是我们最终要访问的内容;重做日志文件则记录着所有事务操作,一旦出现意外,它能帮助我们恢复数据,就像行车记录仪记录行程,以便后续查看和回溯。
三阶段启动详解(含命令与实例)
启动到 nomount 状态
startup nomount; -- 仅启动实例,不加载数据库文件
核心动作:仅启动数据库实例,分配系统内存空间(SGA),启动 Oracle 后台进程(如负责数据写入的 DBWR、日志写入的 LGWR 等),不涉及任何数据库文件的打开。这就像我们启动汽车引擎,汽车的各个部件(如发动机、仪表盘)开始工作,但还没有挂挡,汽车无法行驶,也无法与外界进行数据交互。
状态特征:此们还不能确定汽车能否正常行驶,因为还没有挂挡,也没有与道路(数据文件)建立连接。时仅能确认实例是否正常启动,无法访问任何数据文件或控制文件。就像汽车引擎启动了,但我
注:若需创建新数据库,必须在该状态下操作。比如新建一个名为 “ORCL_TEST” 的数据库,需先执行 startup nomount 启动实例,再通过 create database 命令完成数据库创建。
进入 mount 状态
alter database mount; -- 从 nomount 状态切换到 mount 状态
核心动作:根据初始化参数文件找到控制文件并打开,通过控制文件获取数据文件和重做日志文件的存储路径,但暂不打开这两类文件。这相当于汽车挂挡成功,导航系统已经知道了目的地(数据文件)的位置,但还没有开始行驶,只是做好了出发前的准备。
实例场景:若需修改数据库归档模式,需先将数据库启动到 mount 状态。例如执行 alter database archivelog 开启归档,需先通过 startup nomount→alter database mount 完成状态切换,再执行归档模式修改命令。
状态特征:可通过查询数据字典视图(如 v$datafile)查看数据文件路径,但无法执行数据读写操作。就像我们知道了目的地在哪里,但汽车还没有开动,无法实际到达目的地获取数据。
达到 open 状态
操作命令:
alter database open; -- 从 mount 状态切换到 open 状态
-- 也可直接使用 startup 命令,默认启动到 open 状态
核心动作:根据控制文件记录的路径,打开所有数据文件和重做日志文件,数据库进入正常服务状态。这就如同汽车正式启动行驶,导航系统引导我们到达目的地,我们可以自由地获取和使用目的地的资源(数据)。
实例场景:日常业务使用数据库时,需将数据库启动到 open 状态。例如执行 startup(默认启动到 open 状态),启动后可通过 select * from scott.emp 查询表数据,或执行 insert/update 等事务操作。
状态特征:数据库完全可用,支持用户连接、事务处理、数据查询等所有正常操作。就像汽车正常行驶后,我们可以在目的地进行各种活动。

2. 数据库关闭操作(风险与四种模式)
长时间关运行的关键数据库关闭存在风险,如数据文件丢失、事务未提交导致启动失败等。因此,我们需要根据不同的业务场景选择合适的关闭模式闭前建议提前做好数据备份。
关闭操作通用规则
无论选择哪种关闭模式,执行 shutdown 命令后,数据库均不允许新用户会话连接,仅处理已存在的会话和事务。这就像一家商店准备打烊,会先停止接待新顾客,然后处理完店内现有顾客的业务后再关门。
四种关闭模式详解(含例子与对比)
|
关闭模式 |
核心特点 |
操作命令 |
实例场景 |
风险等级 |
|---|---|---|---|---|
|
普通关闭(normal) |
等待所有当前会话自动退出,等待所有事务完成,强制触发检查点,数据无丢失 |
shutdown normal |
非业务高峰期,需安全关闭数据库(如夜间维护)。例:执行命令后,若有用户未退出会话,数据库会一直等待,直到用户手动断开连接后才关闭。 |
低 |
|
立即关闭(immediate) |
不等待当前会话退出,强制中断会话;未提交事务自动回滚,强制触发检查点 |
shutdown immediate |
业务紧急停机(如发现数据库异常需快速重启)。例:用户正在执行 insert 操作未提交,执行该命令后,会话被中断,未提交的 insert 数据回滚,数据库快速关闭。 |
中 |
|
事务关闭(transactional) |
等待当前所有事务完成后,自动中断会话,强制触发检查点 |
shutdown transactional |
需保证现有事务完成但不允许新事务进入(如业务截止后关闭数据库)。例:用户正在执行转账事务(已发起未提交),数据库会等待该事务提交/回滚后,自动断开用户会话并关闭。 |
中低 |
|
异常关闭(abort) |
不等待会话和事务,直接强制关闭;不触发检查点,未提交事务丢失,数据可能损坏 |
shutdown abort |
数据库完全卡死无法正常关闭时的应急操作。例:数据库因硬件故障无响应,执行该命令强制关闭,下次启动时需进行实例恢复,可能存在数据丢失风险。 |
高 |
-
普通关闭(normal):就像餐厅打烊,服务员会等待所有顾客用餐完毕、主动离开后才关门,整个过程平稳有序,不会出现任何顾客不满的情况。
-
立即关闭(immediate):好比电影院遇到紧急情况,工作人员会立即中断电影播放,引导观众快速离开,虽然会影响观众的观影体验(未提交事务回滚),但能保证大家的安全(数据基本安全)。
-
事务关闭(transactional):类似于公交车末班车,司机会等待所有已经上车的乘客到达目的地后再收班,不再允许新乘客上车,既保证了已上车乘客的行程(现有事务完成),又能按时结束运营。
-
异常关闭(abort):这就像家里突然停电,所有电器瞬间停止工作,正在进行的烹饪、文件下载等操作都会中断,甚至可能导致数据丢失或电器损坏。
关键概念:一致性与不一致数据库
-
一致性数据库:通过 normal、immediate、transactional 三种模式关闭的数据库,无未完成事务(未提交事务已回滚或提交),数据缓冲区脏块(修改后未写入文件的数据)已写入数据文件,下次启动无需恢复。这就像我们整理好的房间,所有物品都放回了原处,下次使用时可以直接上手。
-
不一致数据库:通过 abort 模式或 startup force(含 abort 关闭 + 重启)关闭的数据库,存在未处理事务和未写入文件的脏块,下次启动需执行实例恢复。这好比房间被突然闯入的人弄得一团糟,下次使用前需要先整理干净。
当数据库以不一致状态关闭后,下次启动时会自动进行实例恢复,过程如下:
-
重做事务:Oracle 从 Redo log 中找到最近一次检查点位置,重做该位置之后的所有已提交事务。这就像我们根据行车记录仪的记录,重新走一遍已经走过的正确路线。
-
回滚未提交事务:将未提交的事务回滚,恢复数据到事务发起前的状态。好比我们发现走错了路,及时掉头回到原来的路口。
-
释放资源:释放事务占用的锁、内存等资源,确保数据库启动后状态一致。就像我们到达目的地后,停车熄火,释放汽车的动力资源。
3. CDB 与 PDB 操作(容器数据库环境)
随着 Oracle 12c 及以上版本的普及,CDB(容器数据库)与 PDB(可插拔数据库)的架构逐渐成为主流。CDB 是包含一个 root 数据库(容器)和多个 PDB(可插拔数据库)的环境,PDB 的操作依赖 CDB 的状态。
核心前提
必须先打开 CDB(root 数据库),才能对 PDB 进行打开、关闭等操作,CDB 和所有 PDB 共享同一个控制文件。这就像我们要进入一个大型商场(CDB),必须先打开商场的大门,然后才能进入各个店铺(PDB)进行购物。

PDB 的四种状态
-
正常读写状态(read write):可执行所有数据操作,是 PDB 的默认工作状态。这就像一家正常营业的店铺,顾客可以自由进出,购买商品(修改数据)。
-
只读状态(read only):仅允许查询数据,不允许修改(如用于报表查询的 PDB)。好比一家展示厅,顾客只能观看商品,不能购买或触摸(修改)。
-
升级状态(upgrade):用于 PDB 版本升级时的临时状态,升级期间无法提供服务。这就像店铺进行装修升级,暂时停止营业,顾客无法进入。
-
Mount 状态:表面显示为 “mount”,实际等同于 PDB 关闭(因 CDB 打开后控制文件已打开,PDB 未打开时默认显示该状态)。就像店铺的门虽然开着,但里面没有营业人员,顾客无法进行任何购物活动。
PDB 的打开与关闭(含命令与例子)
打开 PDB 的两种方式
方式一:在 CDB 中批量 / 指定打开
-- 打开单个 PDB
alter pluggable database PDB_TEST open; -- 打开名为 PDB_TEST 的 PDB
-- 打开所有 PDB
alter pluggable database all open; -- 打开 CDB 中所有 PDB
方式二:登录 PDB 单独打开
-- 启动监听(确保监听已注册 PDB 服务)
lsnrctl start;
-- 登录 PDB
sqlplus sys/123456@localhost:1521/PDB_TEST as sysdba; -- 使用 sys 用户登录 PDB_TEST
-- 打开 PDB
startup; -- 登录后执行该命令直接打开当前 PDB
关闭 PDB 的两种方式
方式一:在 CDB 中批量 / 指定关闭
-- 关闭单个 PDB
alter pluggable database PDB_TEST close; -- 关闭名为 PDB_TEST 的 PDB
-- 关闭所有 PDB
alter pluggable database all close; -- 关闭 CDB 中所有 PDB
方式二:登录 PDB 单独关闭
-- 登录目标 PDB(步骤同打开方式二的 1-2)
sqlplus sys/123456@localhost:1521/PDB_TEST as sysdba;
-- 关闭 PDB
shutdown immediate; -- 执行后 PDB 进入 mount 状态
PDB 状态保留(自动启动设置)
保留当前状态:
alter pluggable database PDB_TEST save state; -- 保存 PDB_TEST 当前状态
例子:若 PDB_TEST 当前为 open 状态,执行该命令后,重启 CDB 时,PDB_TEST 会自动打开为 open 状态;若当前为 read only 状态,重启后仍为 read only 状态。这就像我们玩游戏时的存档功能,下次再次进入游戏会自动恢复到之前的状态。
取消状态保留:
alter pluggable database PDB_TEST discard state; -- 取消 PDB_TEST 状态保留
例子:执行该命令后,无论 PDB 当前状态如何,重启 CDB 后,PDB 默认处于 mount 状态,需手动打开。好比我们玩黑神话,打boss没存档,打过后再被小怪偷死,下次进入游戏又得重新打咯,所有操作需要我们重新操作。
4. 关键注意事项
-
内存问题:启动数据库时,若提示内存不足,可通过增大虚拟机内存(如从 2G 调整为 4G)或扩展 swap 空间解决。这就像我们运行大型软件时,如果电脑内存不足,就需要增加内存条或虚拟内存,以保证软件正常运行。
-
表空间使用:系统表空间仅存放数据字典和元数据,普通用户表需创建独立表空间(如 user 表空间)存储,避免直接使用系统表空间。这好比我们的衣柜,系统表空间是衣柜的固定隔板,用于存放重要的衣物分类标签(数据字典),而普通用户表就像我们的衣服,应该放在独立的抽屉(用户表空间)里,这样既方便管理,又不会影响衣柜的整体结构。
-
生产环境禁忌:生产环境中,除非紧急情况,禁止使用 shutdown abort 和 startup force 命令,防止数据丢失或数据库损坏。这就像我们在驾驶汽车时,除非遇到极其危险的情况,否则不会紧急刹车,因为紧急刹车可能会导致车辆失控或损坏。
-
OCM 考试重点:OCM 考试中,PDB 状态保留操作是高频考点,需熟练掌握 save state 和 discard state 命令的使用。对于想要考取 OCM 认证的同学来说,这两个命令就像考试中的重点公式,必须牢记于心,才能在考试中应对自如。
5. 总结
Oracle 数据库的启动与关闭是 DBA 日常工作中最基础也最重要的操作之一。从 nomount→mount→open 的三阶段启动,到 normal→immediate→transactional→abort 的四种关闭模式,再到 CDB 环境下 PDB 的灵活操作,每一个环节都需要我们深入理解其原理和适用场景。
希望通过本文的讲解,大家能够对 Oracle 实例启停有一个全面且清晰的认识。无论是新手还是业内人士,都可以将本文作为学习和复习的参考资料。记住,数据库操作容不得半点马虎,只有掌握了这些基础知识,才能在复杂的数据库管理工作中游刃有余。如果你有任何疑问或想要分享的经验,欢迎在评论区留言交流,让我们一起在数据库的世界里不断探索和进步!

被折叠的 条评论
为什么被折叠?



