ORACLE_SID含义

2024-01-15 16:08
文章标签 oracle 含义 sid

本文主要是介绍ORACLE_SID含义,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.2.4 ORACLE_SID的含义
http://book.51cto.com  2007-09-04 10:47  盖国强  人民邮电出版社  我要评论(0)
摘要:《循序渐进Oracle——数据库管理、优化与备份恢复》第1章主要介绍的是Oracle数据库的创建,本节说

明了ORACLE_SID的含义。
标签:ORACLE_SID  ORADIM  服务  Linux  Oracle  循序渐进Oracle——数据库管理、优化与备份恢复
Oracle帮您准确洞察各个物流环节

1.2.4 ORACLE_SID的含义
注意到在ORADIM创建服务之前,首先设置了ORACLE_SID:

set ORACLE_SID=eygle

在Linux/UNIX系统的创建中,同样要设置ORACLE_SID,不过Linux/UNIX上不存在服务这项内容,实例是可以通过

参数文件直接启动的。
看一下Linux上正常情况下启动到nomount状态的过程: [oracle@jumper oracle]$ cd $ORACLE_HOME/dbs

[oracle@jumper dbs]$ lsinitconner.ora  init.ora  lkCONNER  orapwconner  spfileconner.ora 

spfile.ora[oracle@jumper dbs]$ export ORACLE_SID=conner[oracle@jumper dbs]$ sqlplus "/ as

sysdba"SQL*Plus: Release 9.2.0.4.0 - Production on Wed Nov 3 14:57:22 2004Copyright (c) 1982,

2002, Oracle Corporation.  All rights reserved.Connected to an idle instance.SQL> startup

nomountORACLE instance started.Total System Global Area   80811208 bytesFixed Size                

  451784 bytesVariable Size              37748736 bytesDatabase Buffers           41943040

bytesRedo Buffers                 667648 bytes
注意这里,Oracle根据参数文件的内容,创建了instance,分配了相应的内存区域,启动了相应的后台进程。
回顾一下前面的内容,注意到SID和ORACLE_SID已经多次出现,那么SID是什么?在数据库启动过程中又起到什么

作用呢?
SID是System IDentifier的缩写,而ORACLE_SID就是Oracle System Identifier的缩写,在Oracle系统中,

ORACLE_SID以环境变量的形式出现,在特定版本的Oracle软件安装(也就是ORACLE_HOME)下,当Oracle实例启

动时,操作系统上fork的进程必须通过这个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/dbs(Windows上为

$ORACLE_HOME/database目录)。
spfile从Oracle 9i开始引入并成为了缺省使用的参数文件,Oracle启动实例时按照以下顺序从缺省目录查找参

数文件:spfile<ORACLE_SID>.ora→spfile.ora →init<ORACLE_SID>.ora。如果这3个文件都不存在,则Oracle

实例将无法启动。
通过这些信息可以知道,在同一个ORACLE_HOME下,Oracle能够根据ORACLE_SID将实例区分开来;但是如果在不

同的ORACLE_HOME下,Oracle将无法屏蔽相同名称的ORACLE_SID,也就是说即使在同一台主机上,Oracle也是能

够创建相同ORACLE_SID的实例的。
以下一个测试,首先启动一个Oracle8i下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.<...ignore SGA info here...>SQL> ! ps -ef|grep eygleoracle8 11106 

   1  0 10:24:02 ?        0:00 ora_d000_eygleoracle8 11090     1  0 10:24:02 ?        0:00

ora_ckpt_eygleoracle8 11086     1  0 10:24:02 ?        0:00 ora_dbw0_eygleoracle8 11084     1  0

10:24:02 ?        0:00 ora_pmon_eygleoracle8 11092     1  0 10:24:02 ?        0:00

ora_smon_eygleoracle8 11088     1  0 10:24:02 ?        0:00 ora_lgwr_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 2007Copyright (c) 1982,

2002, Oracle Corporation.  All rights reserved.Connected to an idle instance.SQL> startup

nomount;ORACLE instance started.<...ignore SGA info here...>SQL> ! ps -ef|grep pmon_eygleoracle9

11214 11172  0 10:24:58 pts/1    0:00 grep pmon_eygleoracle9 11180     1  0 10:24:48 ?        0:00

ora_pmon_eygleoracle8 11084     1  0 10:24:02 ?        0:00 ora_pmon_eygle

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

区分开来: $ ipcs -iIPC status from <running system> as of Fri Feb 16 10:30:02 CST 2007T        

ID      KEY        MODE        OWNER    GROUPMessage Queues:q          0   0x2e781d5  --rw-r--r-- 

   root     rootT         ID      KEY        MODE        OWNER    GROUP ISMATTCHShared Memory:m   

   4096   0xabdc9b64 --rw-r-----  oracle8      dba       12m       1025   0x79552064 --rw-r----- 

oracle9      dba       11Semaphores:s    1245184   0x79978bac --ra-r-----  oracle8      dbas    

458753   0xa0e9f594 --ra-r-----  oracle9      dba

通过Oracle提供的一个小工具sysresv,我们可以找到对应于不同的ORACLE_SID,操作系统上创建的共享内存段

ID(Shared Memory)和信号量ID(Semaphores)等信息。
$ sysresv -l eygle juliaIPC Resources for ORACLE_SID "eygle" :Shared Memory:ID             

KEY2560            0x79552064Semaphores:ID              KEY720896          0xa0e9f594Oracle

Instance alive for sid "eygle"IPC Resources for ORACLE_SID "julia" :Shared Memory:ID             

KEY514             0xab281214Semaphores:ID              KEY196610          0xa7645a54Oracle

Instance alive for sid "julia"
在Linux/UNIX上,ORACLE_SID还和一个名为oratab的文件有关,在Solaris环境中,这个文件一般位

于/var/opt/oracle目录下,在Linux及其他UNIX平台,这个文件一般位于/etc目录下。该文件的主要内容如下:

# This file is used by ORACLE utilities.  It is created by root.sh# and updated by the Database

Configuration Assistant when creating a database.# A colon, ':', is used as the field terminator. 

A new line terminates# the entry.  Lines beginning with a pound sign, '#', are comments.## Entries

are of the form:#   $ORACLE_SID:$ORACLE_HOME:<N|Y>:## The first and second fields are the system

identifier and home# directory of the database respectively.  The third filed indicates# to the

dbstart utility that the database should , "Y", or should not,# "N", be brought up at system boot

time.## Multiple entries with the same $ORACLE_SID are not allowed.#*:/opt/oracle/product/9.2.0:N
当执行dbstart脚本时,Oracle会根据这里记录的ORACLE_SID的<N|Y>的设置来决定是否启动相关实例。
与Linux/UNIX上的情况类似,Windows上的Oracle环境也依赖于服务而存在,如图1-20。

 
图1-20Windows Oracle服务示意图

注意到Oracle环境的初始化是通过ORACLE.EXE eygle来完成的,至于实例和数据库是否随服务启动要依赖于注册

表中的设置。
通过手动在命令行执行类似命令,可以初始化任意的Oracle环境:

C:/>oracle juliaPress CTRL-C to exit server:   

此后就可以连接到这个环境启动实例: C:/>set ORACLE_SID=juliaC:/>sqlplus "/ as sysdba"SQL*Plus:

Release 10.2.0.1.0 - Production on 星期六 2月 17 10:11:13 2007Copyright (c) 1982, 2005, Oracle. 

All rights reserved.  
已连接到空闲例程。 SQL> startup nomount;ORA-01078: failure in processing system parametersLRM-

00109: ???????????????? 'C:/ORACLE/10.2.0/DATABASE/INITJULIA.ORA'  
当然还需要创建参数文件和口令文件等: C:/>cp c:/oracle/10.2.0/database/SPFILEEYGLE.ORA

c:/Oracle/10.2.0/database/spfilejulia.oraC:/>orapwd file=c:/oracle/10.2.0/database/PWDjulia.ora

password=oracle entries=5  

此后,实例可以顺利启动,并可以挂接和打开数据库: C:/>sqlplus "/ as sysdba"SQL*Plus: Release

10.2.0.1.0 - Production on 星期六 2月 17 10:13:10 2007Copyright (c) 1982, 2005, Oracle.  All

rights reserved.  

已连接到空闲例程。 SQL> startup nomount;  
ORACLE 例程已经启动。 <...ignore SGA info here...>SQL> set linesize 120SQL> show parameter

instance_nameNAME                                 TYPE                   VALUE-------------------

----------------- ---------------------- ---------------instance_name                       

string                 juliaSQL> show parameter db_nameNAME                                 TYPE  

                VALUE-------------------------------  ------------------ ------------------------

------db_name                              string                 eygleSQL> alter database mount; 

 

数据库已更改。 SQL> alter database open; 
数据库已更改。
如果在环境窗口中按下CTRL+C组合键退出,则数据库将异常中断。
总结一下,实际上不管在Windows还是Linux/UNIX环境下,ORACLE_SID的作用就是设置一个Oracle环境窗口,通

过这个环境变量来标示和命名系统进程,此后Oracle的活动可以由此展开。

这篇关于ORACLE_SID含义的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/609458

相关文章

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

Oracle 通过 ROWID 批量更新表的方法

《Oracle通过ROWID批量更新表的方法》在Oracle数据库中,使用ROWID进行批量更新是一种高效的更新方法,因为它直接定位到物理行位置,避免了通过索引查找的开销,下面给大家介绍Orac... 目录oracle 通过 ROWID 批量更新表ROWID 基本概念性能优化建议性能UoTrFPH优化建议注

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

Oracle登录时忘记用户名或密码该如何解决

《Oracle登录时忘记用户名或密码该如何解决》:本文主要介绍如何在Oracle12c中忘记用户名和密码时找回或重置用户账户信息,文中通过代码介绍的非常详细,对同样遇到这个问题的同学具有一定的参... 目录一、忘记账户:二、忘记密码:三、详细情况情况 1:1.1. 登录到数据库1.2. 查看当前用户信息1.

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

PLsql Oracle 下载安装图文过程详解

《PLsqlOracle下载安装图文过程详解》PL/SQLDeveloper是一款用于开发Oracle数据库的集成开发环境,可以通过官网下载安装配置,并通过配置tnsnames.ora文件及环境变... 目录一、PL/SQL Developer 简介二、PL/SQL Developer 安装及配置详解1.下