数据库启动过程中有3个状态:nomount、mount、open
通过如下视图可查看数据库的当前状态:
select open_mode from v$database;
--数据库状态为nomount时查询报错:database not mounted
select status from v$instance;
--数据库为nomount时,值为STARTED
mounted ------mount状态
open -------open状态
1、nomount状态
Oracle首先到 $ORACLE_HOME/dbs 【windowns在$ORACLE_HOME/database目录下】按顺序寻找下列文件,如果找到了就启动实例,不继续往下找了:
1、spfile<ORACLE_SID>.ora
2、spfile.ora
3、init<ORACLE_SID>.ora
如果上述三个文件都没有找到,则报如下错误:
SQL> startup nomount
ORA-01078: failure in processing system parameters
LRM-00109:could not open parameter file '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initmydb.ora'
**提示的是找不到最后一个文件,表明前面两个已经找过了。
数据库启动到nomount的过程中,会根据spfiel或pfile中的参数来分配内存、创建后台进程,实例被创建。
可通过如下命令来查看ORACLE最终是使用哪个参数文件来创建实例:
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /u01/app/oracle/product/11.2.0
/dbhome_1/dbs/spfilemydb.ora
参数文件中最少必须设置DB_NAME参数,有这个参数,数据库就能启动。
也可以查看alert日志来确认ORACLE实例在启动的过程中使用的是哪个参数文件:
[oracle@xsh trace]$ tail -f alert_mydb.log
Using parameter settings in server-side spfile /u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfilemydb.ora
如果数据库无法启动到nomount状态,多半是OS的问题,例如补丁没打好等。
此时无法建立远程连接,可使用如下命令修改数据库到mount状态:
Alter database mount;
2、mount状态
此时ORACLE根据参数文件中的control_files参数找到控制文件的位置,然后根据控制文件中的信息对其中记录的各数据文件进行存在性判断,如果控制文件中记录的数据文件实际不存在,则启动过程中会报错。
可以通过如下命令来查看控制文件的位置
:
SQL> show parameter control_files
此时只有sys账户以sysdba的身份才能远程登陆,可用如下命令修改数据库至open状态:
Alter database open;
3、open状态
此时ORACLE装载控制文件中记录的数据文件,此时有权限的账户都可以进行远程访问。