oracle中sid是什么意思,我对于ORACLE_SID的理解

  • Post author:
  • Post category:其他


ORACLE_SID和ORACLE_HOME是最基本的必须设置的两个环境变量。

Tom大师如是说

If

you’re unfamiliar with the term SID or ORACLE_SID, a full definition is

called for. The SID is a site identifier. It and ORACLE_HOME (where the

Oracle software is installed) are hashed together in UNIX to create a

unique key name for attaching an SGA. If your ORACLE_SID or ORACLE_HOME

is not set correctly, you’ll getthe ORACLE NOT AVAILABLE error, since you can’t attach to a shared memory segment that is identified by this unique key. On Windows, shared memory isn’t used in the same fashion as UNIX, but the SID is stillimportant.

You can have more than one database on the same ORACLE_HOME, so you

need a way to uniquely identify each one, along with their configuration

files.

根据Tom大师所说的,在Unix/Linux下,Oracle的实例是有一块共享内存(SGA)和一组后台进程组成的,

Oracle使用ORACLE_HOME和ORACLE_SID进行hash,得到一个key,

Oracle根据这个key来寻找SGA,如果不设置这两个环境变量,oracle就无法找到分配的SGA,

也就无法连接到实例。这也是这两个环境变量为什么必须设置的原因。[@more@]我们可以利用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》中也得到了验证。