ORACLE_SID和ORACLE_HOME是最基本的必须设置的两个环境变量。
根据Tom大师所说的,在Unix/Linux下,Oracle的实例是有一块共享内存(SGA)和一组后台进程组成的,
Oracle使用ORACLE_HOME和ORACLE_SID进行hash,得到一个key,
Oracle根据这个key来寻找SGA,如果不设置这两个环境变量,oracle就无法找到分配的SGA,
也就无法连接到实例。这也是这两个环境变量为什么必须设置的原因。
我们可以利用oracle自带的sysresv工具查看到
oracle@solaris:~$ sysresv
IPC Resources for ORACLE_SID "test" :
Shared Memory:
ID KEY
58 0xdced621c
Semaphores:
ID KEY
5 0xf52cedb8
Oracle Instance alive for sid "test"
另外,使用ipcs也可以看到共享内存的情况
oracle@solaris:~$ ipcs -m | grep ora
m 58 0xdced621c --rw-rw---- oracle dba
可以看到,两者是对应的。
由上面的结论可知,在相同的ORACLE_HOME下,必须使用不同ORACLE_SID来区分不同的实例,
在不同的ORACLE_HOME下,可以有相同的ORACLE_SID,Oracle照样可以区分不同的实例,
这点在盖国强先生的《深入解析Oracle》中也得到了验证。
阅读(1010) | 评论(0) | 转发(0) |