ORACLE启动

 

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

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

1、启动到nomount状态;

2、启动到mount状态;

3、启动到open状态。

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

 

一、启动到nomount状态

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

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

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

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

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

show parameter background_dump(警报日志文件alert_<SID>.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<sid>。如果丢失了口令文件,在mount阶段就会出现错误。对于口令文件,Oracle缺省查找 orapw<sid>文件,如果该文件不存在,则继续查找orapw文件,如果两者都不存在,则数据库将会出现错误。如果口令文件丢失,通过 orapw工具可以重建,所以在通常的备份策略中可以不包含口令文件。

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


三、启动到open状态

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

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

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

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

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


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

 

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值