1、启动过程

数据库启动经历如下三个状态:

nomount—mount—open

1.1、nomount

启动实例:

  1. 查找参数文件,先查找spfile,如果没有,查找pfile;
  2. 启动后台进程
  3. 分配内存
  4. 打开告警日志文件和跟踪文件

操作:使用startup nomount命令启动当前实例,启动到非挂载状态,即只启动Oracle实例,而不启动数据库,因此只需要参数文件即可

[oracle@localhost ~]$ lsnrctl start

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 28-JUN-2022 12:14:54

Copyright (c) 1991, 2013, Oracle.  All rights reserved.

Starting /oracle/home/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Log messages written to /oracle/base/diag/tnslsnr/localhost/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.4.0 - Production
Start Date                28-JUN-2022 12:14:54
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /oracle/base/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
The listener supports no services
The command completed successfully
[oracle@localhost ~]$ 
[oracle@localhost ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.4.0 Production on Tue Jun 28 12:15:04 2022

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

SQL> startup nomount
ORA-01031: insufficient privileges
SQL> 
SQL> conn / as sysdba
Connected to an idle instance.
SQL> 
SQL> startup nomount
ORACLE instance started.

Total System Global Area  417546240 bytes
Fixed Size                  2253824 bytes
Variable Size             310381568 bytes
Database Buffers           96468992 bytes
Redo Buffers                8441856 bytes
SQL> 

使用lsnrctl status命令查看实例状态:orcl实例启动状态为blocked。

1.2 、mount

启动实例后,orcale数据库会按照参数文件中control_file参数的设置,找到所有控制文件,再确定所存控制文件都完好,并且内容一致后,将控制文件的内容加载到内存,并且从控制文件中获取所有的数据文件和日志文件的名称及其位置,但不做一致性检查。
操作:使用alter database mount命令使得数据库启动到mount状态,此状态下表示创建实例并加载数据文件。

SQL> alter database mount;

Database altered.

SQL> 

使用lsnrctl status命令查看实例状态:orcl实例状态为ready。

1.3、open

open

oracle需要检查所有的数据文件和日志文件的状态,如果这些文件的实际状态和控制文件的记录一致,则打开数据库,允许普通用户连接数据库,并执行各种操作。
操作:使用alter database open命令使得数据库处于打开状态。

2、总结‘

startup相当于依次执行以下三个命令:

SQL>startup nomount;
SQL>alter database mount;
SQL>alter database open;

判断实例启动状态

一、看服务

看windows中OracleServiceXXXX服务是否启动来判断实例启动的状态。

二、用命令

用lsnrctl status命令查看Oracle实例启动的情况。

查看默认实例
windows中用环境变量ORACLE_SID表示当前实例。如果启动了多个实例,则默认实例为最后安装的实例。可以在注册表中查看ORACLE_SID的值,注册表位置(Oracle10g):
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraDb11g_home1

多实例连接
查看当前实例
同一服务器有多个实例且均已启动,若登录时不指定数据库实例,一般采用环境变量ORACLE_SID,系统默认的ORACLE_SID值为最后安装的实例
sqlplus不指定数据库实例连接:sqlplus / as sysdba
上面的命令以操作系统认证的方式登录,即已经使用管理员身份登录到了操作系统,就可以使用sysdba身份登录到数据库中,因此不需要输入用户名和密码。该命令没有指定连接标识符,所以连接到当前实例(默认实例)
通过以下命令查看当前连接实例信息:

SQL>show parameter instance;
SQL>show parameter instance_name;
SQL>select * from v$instance;

切换实例
要与一个非默认的实例建立连接,可以在命令行窗口中先设置ORACLE_SID变量的值,然后再用sqlplus建立连接。注意设置值只对当前命令行窗口有效:set ORACLE_SID=XXXX;