oracle数据库涉及到Listener,instance,SID等几个概念。
listener:
仅存在于server端,用于监听远程client向server发出的连接请求时,检查其合法性默认名为listener,对应配置文件为listener.ora
instance:
我姑且将其理解为是一个数据库实例。一个DB可以对应多个instance,而一个instance同一个时间只能装载和打开一个数据库。没有启动instance前,数据库只是个空壳,无法进行操作,而只有启动instance并且load了数据库文件之后,用户才可以通过instance对数据库进行相关操作。
命令行状态下:
sqlplus / as sysdba 连接数据库 「アイドル・インスタンスに接続されました」 连接到空的instance
很明显,此时数据库instance尚未启动。此时如果输入用户ID,尝试连接到指定数据库
sql>connect username/password@DBname
必然出错。原因在于我的服务端跟客户端都在同一台机器上,而oracle数据库连接有个特点就是,本地连接不需要通过监听器,它可以l连接到已启动的instance上,也可以连接到空的instance(尚未启动),sqlplus首先根据ORACLE_HOME找到oracle 可执行文件,然后启动一个专用服务器进程,并运行这个程序。然后依据ORACLE_HOME和ORACLE_SID这两个环境变量来确定要连接的instance。
SID
用于唯一地标识一个数据库instance,可以理解为instance的名字。
DOS下,oracle数据库启动步骤如下:
set ORACLE_SID=DBname
sqlplus / as sysdba
startup
Linux系统下查看当前数据库实例: $echo ORACLE_SID