暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle数据库的启动——ORACLE_SID的含义

原创 eygle 2019-12-19
4647

ORACLE_SID的含义

SID是什么?在数据库启动过程中又起到什么作用呢?

SID是System IDentifier的缩写,而ORACLE_SID就是Oracle System IDentifier 的缩写,在Oracle系统中,ORACLE_SID以环境变量的形式出现,当Oracle实例启动时,在操作系统上fork的进程就依据ORACLE_SID这个环境变量来创建,这就是SID的作用。

Oracle的实例(instance)是由一块共享内存区域(SGA)和一组后台进程(background processes)共同组成,而后台进程正是数据库和操作系统进行交互的通道,这些进程的名称就是通过ORACLE_SID决定的。

通过前面的讨论可以知道,实例的启动需要一个参数文件,参数文件的名称就是由ORACLE_SID决定的,对于init文件,缺省的文件名称是init<ORACLE_SID>.ora,对于spfile文件,缺省的文件名为spfile<ORACLE_SID>.ora,Oracle依据ORACLE_SID来决定和寻找参数文件启动实例。

在同一个ORACLE_HOME下,通过参数文件,Oracle能够根据ORACLE_SID将实例区分开来;但是注意如果在不同的ORACLE_HOME下,即使在同一台主机上,Oracle也是能够创建相同ORACLE_SID的实例的。

以下一个测试,首先启动一个Oracle 8i下ORACLE_SID为eygle的实例:

$ export ORACLE_SID=eygle
$ sqlplus "/ as sysdba"
SQL*Plus: Release 8.1.7.0.0 - Production on Fri Feb 16 10:23:58 2007
(c) Copyright 2000 Oracle Corporation.  All rights reserved.
Connected to an idle instance.

SQL> startup nomount;
ORACLE instance started.
SQL> ! ps -ef|grep ora_smon_eygle
oracle8 11123 11076  0 10:24:15 pts/1    0:00 grep ora_smon_eygle
oracle8 11092     1  0 10:24:02 ?        0:00 ora_smon_eygle

接下来又可以启动另外$ORACLE_HOME下ORACLE_SID为eygle的实例:

$ export ORACLE_SID=eygle
$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on Fri Feb 16 10:24:43 2007
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
Connected to an idle instance.

SQL> startup nomount;
ORACLE instance started.
SQL> ! ps -ef|grep ora_smon_eygle
oracle9 11214 11172  0 10:24:58 pts/1    0:00 grep ora_smon_eygle
 oracle8 11092     1  0 10:24:02 ?        0:00 ora_smon_eygle
 oracle9 11188     1  0 10:24:48 ?        0:00 ora_smon_eygle

现在这同一台主机上就启动了两个相同名称的实例,在操作系统上,Oracle能够通过ID标示将共享内存或信号量区分开来:

$ ipcs -i
IPC status from <running system> as of Fri Feb 16 10:30:02 CST 2007
T         ID      KEY        MODE        OWNER    GROUP
Message Queues:
q          0   0x2e781d5  --rw-r--r--     root     root
T         ID      KEY        MODE        OWNER    GROUP ISMATTCH
Shared Memory:
m       4096   0xabdc9b64 --rw-r-----  oracle8      dba       12
m       1025   0x79552064 --rw-r-----  oracle9      dba       11
Semaphores:
s    1245184   0x79978bac --ra-r-----  oracle8      dba
s     458753   0xa0e9f594 --ra-r-----  oracle9      dba

通过Oracle提供的一个小工具sysresv,我们可以找到对应于不同的ORACLE_SID,操作系统上创建的共享内存段ID(Shared Memory)和信号量ID(Semaphores)等信息:

$ sysresv -l eygle julia
IPC Resources for ORACLE_SID "eygle" :
Shared Memory:
ID              KEY
2560            0x79552064
Semaphores:
ID              KEY
720896          0xa0e9f594
Oracle Instance alive for sid "eygle"
IPC Resources for ORACLE_SID "julia" :
Shared Memory:
ID              KEY
514             0xab281214
Semaphores:
ID              KEY
196610          0xa7645a54
Oracle Instance alive for sid "julia"
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论