ITPub博客

首页 > 数据库 > Oracle > Oracle启动流程

Oracle启动流程

原创 Oracle 作者:youxi423 时间:2009-11-23 22:50:12 0 删除 编辑

ORACLE主要由两部分组成:Instance和Database。Instance是指一组后台进程/线程和一块共享内存区域,而Database是指存储在磁盘上的一组物理文件。

ORACLE数据库的启动主要分3个步骤:

1、启动到nomount状态;

2、启动到mount状态;

3、启动到open状态。

下面分析一下启动的各个步骤:

一、启动到nomount状态

在启动的第一步,ORACLE会寻找到参数文件(pfile/spfile),根据参数设置,创建实例,分配内存,启动后台进程。在这一步,只需要一个参数文件(不需要控制文件和数据文件)就可以启动实例(Instance)。(启动到nomount的命令:SQL>startup nomout)此时,查看alert_.log可以看到这一阶段的启动过程。

在ORACLE9I中,首选spile.ora,如果没有则选择spile.ora,如果没有则选择init.ora,如果没有则启动失败。

可以在SQL*PLUS中通过show parameter spfile命令来检查数据库是否使用了spfile文件,如果value不为NULL,则数据库使用了spfile文件。

在参数文件中,通常需要最少的参数是db_name,设置了这个参数以后,数据库实例就可以启动了。

可以使用下面命令来查看一些缺省路径:

show parameter background_dump(警报日志文件alert_.log的存放地点)

show parameter dump_dest

show parameter control_files

show parameter db_name


特例:在使用RMAN(Recovery Manager)时存在更为特殊的情况,Oracle允许在不存在参数文件的情况下启动一个实例,数据库的db_name会被缺省的命名为DUMMY。(在LINUX下,用$rman target / 来进入RMAN)

二、启动到mount状态

启动到nomount状态以后,Oracle就可以从参数文件中获取控制文件的位置信息。一般会有3个完全相同的控制文件,放在不同的物理硬盘上,避免因为介质故障而同时损坏3个控制文件。

在nomount状态下,可以用v$parameter视图获取控制文件信息,前面已经讲过。在数据库mount以后,可以查询v$controlfile视图获得关于控制文件的信息。(select * from v$controlfile)

在mount过程中,会锁定控制文件,如果找不到控制文件,则会报错,此时可以查看警报日志。因为Oracle的3个控制文件完全相同,如果损失了1,2个,可以复制完好的控制文件,更改为相应的名称,就可以启动数据库了,如果全部丢失了,那就只有恢复或者重建控制文件来打开数据库了。

启动到mount状态,数据库必须具备的另一个重要文件是口令文件,该文件位于$ORACLE_HOME/dbs目录下,缺省的名字为orapw。如果丢失了口令文件,在mount阶段就会出现错误。对于口令文件,Oracle缺省查找orapw文件,如果该文件不存在,则继续查找orapw文件,如果两者都不存在,则数据库将会出现错误。如果口令文件丢失,通过orapw工具可以重建,所以在通常的备份策略中可以不包含口令文件。

通常在Linux/UNIX平台下,在$ORACLE_HOME/dbs目录下,还会存在另外一个文件,该文件命名规则为lk,lk指lock,该文件在数据库启动时创建,用于操作系统对数据库的锁定。当数据库启动时获得锁定,数据库关闭时释放。


三、启动到open状态

由于控制文件中记录了数据库中数据文件,日志文件的位置信息、检查点信息等重要信息,所以在数据库的open阶段,Oracle可以根据控制文件中记录的这些信息找到这些文件,然后进行检查点及完整性检查。

在数据库open的过程中,Oracle进行的检查中包括以下两项:

第一次检查数据文件头中的检查点计数(Checkpoint cnt)是否和控制文件中的检查点计数(Checkpoint cnt)一致。以确定数据文件是来自同一版本,而不是从备份中恢复而来(因为Checkpoint cnt不会被冻结,会一直被修改)。

第二次检查数据文件头的开始SCN和控制文件中记录的该文件的结束SCN是否一致,如果控制文件中记录的结束SCN等于数据文件头的开始SCN,则不需要对那个文件进行恢复。

仅在open阶段,Oracle才尝试打开并锁定数据文件,如果丢失或出现问题,则会给出错误提示。这时就需要DBA的介入进行处理,根据不同情况进行相应的恢复。


!!!在数据库出现问题时,首先查看alert_.log!!!

在完成数据库验证以后,数据库处于一致的状态,还需要进行一系列的处理过程:将UNDO段在线等操作,然后数据库可以提供访问,同时SMON可以开始进行事务回滚等。

在每次数据库的启动过程中,Oracle都需要判断控制文件中记录的字符集和数据库中的字符集是否相符,如果相符,则记录一条日志,如果不相符合,则以数据库中的字符集为准更新控制文件中的字符集记录。

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9910417/viewspace-1028985/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论
  • 博文量
    2
  • 访问量
    2673