在Oracle中,数据库的启动经历几个过程?
♣ 答案部分
Oracle数据库的启动,严格来说应该是实例的启动,数据库仅仅是在实例启动后进行装载。Oracle数据库启动的过程被划分为几个不同的步骤,在不同的启动过程中,可以对其实现不同的操作。
启动命令:STARTUP [FORCE][RESTRICT] [PFILE=...] [NOMOUNT] [MOUNT] [OPEN]
启动过程:NOMOUNT--->MOUNT--->OPEN,详细情况如下表所示:
阶段
NOMOUNT阶段(即实例的启动,又称STARTED状态)
MOUNT阶段
OPEN阶段
完成的任务
实例的启动通常包含下列任务:
(a)按以下顺序在$ORACLE_HOME/dbs(Windows平台在%ORACLE_HOME%\database目录)目录下搜索下列参数文件:
spfile<SID>.ora ---> spfile.ora ---> init<SID>.ora
(b)根据参数内容分配SGA。
(c)启动后台进程,例如PMON、SMON等。
(d)打开并修改告警日志文件及跟踪文件。
MOUNT阶段完成的任务如下所示:
(a)利用参数文件中的CONTROL_FILES的值,打开并锁定控制文件。检查控制文件是否存在且同步。即使有一个控制文件缺失或损坏,实例也会向DBA返回错误(指明控制文件缺失或状态不同步)并保持NOMOUNT状态。
(b)将数据库与实例关联起来。
(c)读取控制文件并获取数据文件和Redo日志文件的名称和状态信息,但不检查数据和日志文件是否存在。
需要注意的是,这一步会读取控制文件,如果这一步有任何一个控制文件被损坏,那么数据库就无法正常启动。
OPEN阶段完成的任务如下所示:
(a)验证所有的未脱机数据文件是否存在,但是SYSTEM和Undo表空间的文件必须验证。验证控制文件中记录的所有数据文件是否存在,但不验证脱机文件。在DBA尝试使脱机的文件联机之前,不会检查这些文件。如果数据文件不属于SYSTEM或UNDO表空间,那么DBA就可使数据文件脱机并打开实例。如果缺失了任何数据文件,那么数据库会向DBA返回一个错误,指出第一个缺失的文件,此时实例保持MOUNT状态。当实例发现缺失文件时,错误消息中只显示导致问题的第一个文件。要查找需要恢复的所有文件,DBA可以通过检查v$recover_file动态性能视图来获取需要注意的文件的完整列表。
(b)验证所有未脱机数据文件或只读数据文件是否与控制文件同步。必要时,实例会自动执行实例恢复。但是,如果某个数据文件不同步,而且无法通过使用联机重做日志进行恢复,那么DBA必须执行介质恢复。如果任何文件需要进行介质恢复,那么数据库会向DBA返回一条错误消息,指出第一个需要恢复的文件,此时实例保持MOUNT状态。
(c)打开联机Redo日志文件。检查控制文件已知的所有重做日志组是否至少有一个成员存在。任何缺失的成员会记录在告警日志中。只要日志组中至少有一个成员可用,实例就会保持打开状态。
备注
该阶段多用于数据库创建、控制文件重建、特定的备份恢复等。需要注意的是,此阶段不打开任何数据库文件(控制文件、数据文件、在线Redo日志)。在RMAN恢复时,还原数据库控制文件和SPFILE文件也是在该阶段进行。
该阶段多用于以下场景:
(a)重命名数据文件,移动数据文件位置等(数据库被打开,表空间脱机的情况下也可以重命名数据文件)。
(b)修改数据库的归档模式。
(c)实现数据库的完全恢复。
该阶段需要注意以下几点:
(a)在此期间,Oracle将校验所有的数据文件和联机Redo日志文件能否打开并对数据库作一致性检查。
(b)如果出现一致性错误,那么SMON进程将启动实例恢复。
(c)如果任意一个数据文件或联机日志文件丢失,那么Oracle数据库将会报错。
命令
STARTUP NOMOUNT
STARTUP MOUNT
STARTUP
打开数据库的几种特殊方式:
① 只读模式:STARTUP OPEN READ ONLY;
若当前数据库在MOUNT状态,则执行ALTER DATABASE OPEN READ ONLY;。
② 受限模式:
有时进行数据库维护,希望一般的用户不能登录。可以启动到该模式,在这种模式下只有用户具有RESTRICTED SESSION权限的用户才可登录到数据库。
l 启动方法:STARTUP RESTRICT;
l 取消受限:ALTER SYSTEM DISABLE RESTRICTED SESSION;
数据库的关闭也有一些参数需要注意,关闭命令为:
1SHUTDOWN ABORT | IMMEDIATE | TRANSACTIONAL | NORMAL
其中,SHUTDOWN不带参数将缺省为NORMAL。一般情况下,关闭数据库都使用“SHUTDOWN IMMEDIATE”命令。这几个参数的区别见下表:
SHUTDOWN
NORMAL
TRANSACTIONAL
IMMEDIATE
ABORT
是否允许新连接
N
N
N
N
是否允许新事务
Y
N
N
N
是否等待所有未提交事务完成提交
Y
Y
N
N
等待所有会话断开连接
Y
N
N
N
强制检查点
Y
Y
Y
N
实例恢复
N
N
N
Y
告警日志
Shutting down instance (normal)
Shutting down instance (transactional)
Shutting down instance (immediate)
Shutting down instance (abort)
l NORMAL表示不准许新的连接,等待当前所有连接到数据库系统的用户都断开连接(DISCONNECT),强制检查点并关闭文件,下次启动不需要实例恢复。
l TRANSACTIONALE表示不准许新的连接,不允许开启新事务,数据库等待所有事务完成后断开当前连接到数据库的所有用户,强制检查点并关闭文件,下次启动不需要实例恢复。
l IMMEDIATE表示不准许新的连接,不允许开启新事务,任何未提交的事务都进行回滚。数据库显式回滚活动的事务并断开所有当前连接到数据库的用户,强制检查点并关闭文件,下次启动不需要实例恢复。
l ABORT表示不准许新的连接,不允许开启新事务,任何未提交的事务不进行回滚。数据库立刻中断所有SQL的执行,并断开所有用户的连接。不作强制检查点,下次启动需要做实例恢复。
& 说明:
关于Oracle的启动和关闭的更多内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-2139136/
真题1、给出数据库正常启动所经历的几种状态?
答案:数据库正常启动经历如下所示的3个阶段:
(1) STARTUP NOMOUNT -- 数据库实例启动
(2) STARTUP MOUNT -- 数据库装载
(3) STARTUP OPEN -- 数据库打开
本文选自《Oracle程序员面试笔试宝典》,作者:李华荣。
---------------优质麦课------------
详细内容可以添加麦老师微信或QQ私聊。
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:618766405
● 提供OCP、OCM和高可用部分最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
DBA宝典
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:xiaomaimiaolhr,学习最实用的数据库技术。
喜欢就点击“好看”吧
本文分享自微信公众号 - DB宝(lhrdba)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。