1、启动过程
数据库启动经历如下三个状态:
nomount—mount—open
1.1、nomount
启动实例:
- 查找参数文件,先查找spfile,如果没有,查找pfile;
- 启动后台进程
- 分配内存
- 打开告警日志文件和跟踪文件
操作:使用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;