Oracle数据库启动和关闭过程
阶段 | NOMOUNT阶段 | MOUNT阶段 | OPEN阶段 |
命令Startup nomount; 启动顺序: 1、读取参数文件(静态文件和动态文件)init<SID>.ora或者spfile<SID>.ora。 2、根据参数文件内容在内存中分配SGA。 3、根据参数文件内容启动后台进程如SMON、PMON等。 4、往告警日志文件和跟踪文件写入数据。 | 命令startup mount; Nomount阶段启动到mount阶段使用命令: Alter database mount; Oracle需要完成的操作: 1、使用参数文件中的control_file值检测控制文件是否存在并锁定控制文件。 2、将数据库与实例关联。 3、读取控制文件,获取日志文件和数据文件状态和名称是否一致。 4、如果控制文件损坏数据库将无法正常启动。 | 命令 startup; Nomount -> open使用命令:alter database open; Mount -> open 使用命令:alter database open; Oracle 需要完成的操作: 1、验证system、undo和未脱机的数据文件是否存在,验证控制文件中记录的所有数据文件是否存在 2、检验所有未脱机的数据文件是否已与控制文件一致同步。如果不一致会自动执行实例恢复,特殊情况需要DBA手动介质恢复。 3、打开联机日志文件redo log,检查控制文件中已知的所有重做日志至少有一个存在,如果不存在将记录到告警日志中。数据文件和redo log不一致的话SMON进程将会启动实例恢复。 4、打开数据库。 |
当数据库从关闭阶段转为完全打开阶段时,数据库会对以下阶段执行内部一致性检查:
1、NOMOUNT:实例要达到NOMOUNT(又称STARTED)状态,就必须读取初始化参数文件。实例进入NOMOUNT状态时,不会检查任何数据库文件(如控制文件、数据文件、在线Redo文件)。
2、MOUNT:实例进入MOUNT状态时,会检查初始化参数文件中列出的所有控制文件是否都存在且已同步。即使有一个控制文件缺失或损坏,实例也会向管理员返回错误(指明控制文件缺失)并保持NOMOUNT状态。
3、OPEN:实例从MOUNT状态转为OPEN状态时,它会执行以下操作:
(1) 检查控制文件已知的所有重做日志组是否至少有一个成员存在。任何缺失的成员会记录在预警日志中。
(2) 验证控制文件中记录的所有数据文件是否存在,但不验证脱机文件。在管理员尝试使脱机的文件联机之前,不会检查这些文件。如果数据文件不属于SYSTEM 或UNDO表空间,管理员就可使数据文件脱机并打开实例。如果缺失了任何文件,则向DBA返回一个错误,指出第一个缺失的文件,此时实例保持MOUNT 状态。当实例发现缺失文件时,错误消息中只显示导致问题的第一个文件。要查找需要恢复的所有文件,可通过检查v$recover_file动态性能视图来获取需要注意的文件的完整列表。
(3) - 验证所有未脱机数据文件或只读数据文件是否与控制文件同步。必要时,实例会自动执行实例恢复。但是,如果某个文件不同步,导致无法通过使用联机重做日志组进行恢复,管理员必须执行介质恢复。如果任何文件需要进行介质恢复,则向管理员返回一条错误消息,指出第一个需要恢复的文件,此时实例保持MOUNT状态。
另外,v$recover_file会提供需要注意的文件的完整列表。其中列出了存在的且需要进行介质恢复的文件,但不显示错误消息。
数据库的启动过程
启动过程:nomount à mountà open
启动命令:starup[force][restrict] [pfile=...] [nomount] [mount] [open]
1.nomount阶段(即实例的启动)
实例的启动通常包含下列任务:
a.按以下顺序在$ORACLE_HOME/dbs目录下搜索下列文件,即如果第一个没找到,就找下一个spfile<sid>.ora ---> spfile.ora ---> init<sid>.ora
b.分配SGA
c.启动后台进程
d.打开并修改告警.log文件及跟踪文件
使用场景:
多用于数据库创建、控制文件重建、特定的备份恢复等
注意:
此阶段不打开任何的控制文件及数据文件。
2.mount阶段
mount阶段完成的任务:
a.启动实例并打开控制文件,将数据库与实例关联起来
b.利用参数文件中的说明,打开并锁定控制文件
c.读取控制文件以获取数据文件和重做日志文件的名字和状态信息,但不检查数据日志文件是否存在
使用场景:
a.重命名数据文件,移动数据文件位置等(数据库打开,表空间脱机的情况下也可以重命名数据文件)
b.启用或关闭重做日志文件的归档及非归档模式
c.实现数据库的完全恢复
注意:
这一步会读控制文件,如果这一步有一个控制文件损坏就无法启动
3.open阶段
open阶段完成的任务:
a.打开数据文件。
b.打开联机日志文件。
注意:
a.在此期间,Oracle服务器将校验所有的数据文件和联机日志文件能否打开并对数据库作一致性检查。
b.如果出现一致性错误,SMON进程将启动实例恢复。
c.如果任一数据文件或联机日志文件丢失,Oracle服务器将报错。
4.特殊的方式打开数据库
只读模式:
startup open read only;
如果现在在mount
alter database open read only;
受限模式:
有时进行数据库维护,希望一般的用户不能登录。可以启动到该模式,这样只有用户具有
restricted session权限,才可登录到数据库。
启动方法:
startup restrict;
取消受限:
alter system disable restricted session;
数据库实例的关闭
关闭命令:shutdown abort | immediate |transactional | normal (shutdown不带参数将缺省为normal)
关闭选项:
normal->不准许新的连接,等待当前的session 结束,等待当前的事务结束,强制检查点并关闭文件。
transactional ->不准许新的连接,不等待当前的session结束,等待当前的事务结束,强制检查点并关闭文件。
Immediate ->不准许新的连接,不等待当前的session结束,不等待当前的事务结束,强制检查点并关闭文件。
abort->不准许新的连接,不等待当前的session结束,不等待当前的事务结束,不作强制检查点。
常用的诊断文件
1、alterSID.log 告警文件
记录了数据库启动、关闭时间和一些重要操作及错误警告信息,包含错误号ora-,由dba管理
位置由background_dump_dest
维护alertSID.log,定期转移,系统会自动产生新的alert_sid.log
2、后台进程跟踪文件:
记录了后台进程的一些重要信息和警告、错误等
位置:$ORACLE_BASE/admin/vvorcl/bdump/vvorcl_lgwr_15135.trc
3、用户跟踪文件:
由用户进程产生也能由服务器进程产生,跟踪用户的SQL语句的统计信息,也包括错误信息文件位置由user_dump_dest
用户跟踪:
会话级:
altersession set sql_trace=true;
实例级:
altersystem set set sql_trace=true;
跟踪文件的大小由max_dump_file_size参数决定。跟踪时最好要限制他的大小。
动态性能视图
记录当前数据库的活动,并且不停的更新,故不能保证读取数据的一致性
监控和调整数据库
所有者sys
以v$开头
DICT和DICT_COLUMNS视图包含了动态性能视图描述及其列的描述
v$FIXED_TALBE包含了所有视图的名字及相关信息




