参考文献《深入解析Oracle》
一、 背景介绍
Oracle数据库的启动博大精深,辛辛苦苦小半年,一朝回到解放前。温故而知新,事实上我并不懂Orace的启动。
二、 Oracle的启动
Oralc的启动包含三个步骤:1.启动到nomount状态2.启动到mount状态3.启动到open状态下面来具体说说Orace数据库的启动过程:1. 启动到nomount状态
将数据库启动到nomout状态的过程实际就是创建数据库实例的过程。通过执行启动命令startup nomount
可以将数据库启动到nomount状态。当执行此命令将数据库从shutdown启动到nomount状态时,Oralce首先会查找ORACLE_HOME/dbs下面的spfile.ora文件,若没有此文件再找该目下的spfile.ora文件,没有最后找该目录下init.ora文件,若三个文件都没找到,则Oracle会无法初始化实例报错。当数据库正常nomount时,通过show parameter pfile
命令可以查看创建实例所用的参数文件。
instance_name:数据库实例名,在RAC环境下区分各节点实例有用。一般就是环境变量ORACLE_SID,但是当在参数文件里指定了instance_name且与环境变量ORACLE_SID不同时,会出现show parameter instance_name
与select name from v$instance;
查询结果不一致的情况。这个是因为show parameter显示的是从参数文件获取的值,而v$instance视图的值从环境变量ORACLE_SID获取。Oracle在创建数据库实例时,各种进程的命名用的是从环境变量ORALCE_SID获取的值。db_name:数据库的名字,一般会与instance_name相同,但不是必须的,instance_name只是实例名,与数据库名并无必要联系。db_unique_name:这个在HA环境下区分主备库有用。2. 启动到mount状态
数据库从可以执行startup mount
直接从shutdown启动至mount状态,也可以执行alter database mount;
从nomount状态转入mount状态。当数据库进入mount状态时,会从先从参数文件中获取控制文件的信息,若控制文件不存在或者控制文件中记录的db_name与参数文件中不一致,启动至mount状态失败,数据库报错。正常找到并打开控制文件后,Oracle会根据控制文件中记录的数据文件信息判断数据文件是否存在,若数据文件有缺失,会在alert日志中报错,但是数据库能正常启至mount状态。3. 启动到open状态
可以通过执行startup
直接将数据库由shutdown启动至open状态,或者执行alter database open;
将数据库由mount启动至open状态。在将数据库启动至open状态的过程中,首先会检查控制文件与数据文件中检查点计数器(checkpoint CNT)是否一致,然后会检查SCN是否一致。在数据库数据文件进行热备份时,检查点计数器会一致,但是SCN会不一致,数据库进行完热备份后需要根据重做日志对热备份的数据文件进行重做。
三、 其余v$recover_file:数据文件丢失或者需要恢复时可通过此视图查看相关信息。
alter database rename file 'xxx' to 'zzz';蠢货如我又忘了如何重命名数据文件。
v$pwfile_users:查看有sysdba权限的用户
alter system checkpoint;手动执行检查点