一.初始条件
数据库已经安装好在一台机器上,最好在一台*nix机器上。
我的测试环境:Oracle 10g+CentOS 5.2
二.启动Oracle数据库
1.Oracle 10g的启动过程概览, 首先看下图:
Oracle数据库启动过程主要包含三个过程,每个过程对应一个状态NOMOUNT,MOUNT,OPEN:
(1)启动数据库到NOMOUNT状态
在启动的第一步,Oracle首先寻找参数文件(pfile/spfile/init),然后根据参数文件中的设置(如内存分配等设置),创建实例(Instance),分配内存,启动后台进程。
NOMOUNT的过程也就是启动数据库实例的过程.
在Oracle整个启动过程中,关于参数文件及其查找顺序的定义如下:
$ORACLE_HOME/dbs/spfile<ORACLE_SID>.ora
$ORACLE_HOME/dbs/init<ORACLE_SID>.ora
(以上参数文件,在windows上的路径在$ORACLE_HOME/database中)
从Oracle 9i开始,spfile被引入到Oracle数据库,Oracle首选spfile<ORACLE_SID>.ora(如spfileorcl.ora)文件作为启动参数文件;如果该文件不存在,Oracle选择spfile.ora文件;如果前两者都不存在,Oracle将会选择init<ORACLE_SID>.ora文件;如果以上三个文件都不存在,Oracle将无法创建和启动Instance.
这种状态只启动数据库实例,但不打开数据库,nomount参数使用实例:
(2)启动数据库到MOUNT状态
启动到NOMOUNT状态后,Oracle就可以从参数文件中获得控制文件的位置信息,然后找到控制文件,打开控制文件,并且根据控制文件中记录的数据文件位置进行数据文件的存在性判断。
Oracle缺省的会创建控制文件包括control01.ctl ,control02.ctl ,control03.ctl三个,这三个控制文件完全一致。你可以通过下面这条sql语句查到控制文件的具体所在地.
在NOMOUNT状态下,可以查询v$parameter视图,获得控制文件信息,这部分信息来自启动的参数文件;当数据库mount以后,可以查询v$controlfile视图获得关于控制文件的信息,此时,这部分信息来自控制文件.
因为Oracle的三个(缺省的)控制文件内容完全相同,如果只是损失其中1个或2个,可以复制完好的控制文件,并更改为相应的名称,就可以启动数据库;如果丢失了所有的控制文件,那么就需要恢复或重建控制文件来打开数据库了。
在启动了实例之后,实际上数据库的后台进程已经运行,那么当进一步的Mount数据库之后,后台进程就可以根据控制文件中记录的数据文件信息来验证数据文件是否存在,如果数据文件不存在,则后台进程将在告警日志文件中记录文件缺失信息,并且在动态视图中记录这些信息.
mount参数使用实例:
(3)启动数据库到OPEN阶段
由于控制文件中记录了数据库中数据文件,日志文件的位置信息,检查点信息等重要信息,在数据库的OPEN阶段,Oracle将根据控制文件中记录的这些信息找到这些文件,然后进行检查点及完整性检查。如果不存在问题就启动数据库,如果存在不一致或文件丢失则需要进行恢复.
当在这种状态下时,我们就可以自由读写数据库中的数据了。
如果startup不带参数,相当于执行以下3个命令去打开数据库:
SQL > alter database mount
SQL > alter database open
参考资料:
(1)《深入解析Oracle》第一章
(2)《Oracle9i.Database.Administration.Fundamentals》