日期:2014-05-16  浏览次数:20560 次

Oracle INSTANCE_NAME的含义及作用

1.2.5 INSTANCE_NAME的含义及作用
作为Oracle数据库的重要组成部分INSTANCE也存在一个参数标识:INSTANCE_NAME。
INSTANCE_NAME是Oracle数据库的一个参数,在参数文件中定义,用于标识数据库实例的名称,其缺省值通常就是ORACLE_SID,但是不同的实例可以有相同的实例名。通过简单的参数文件复制,我们就可以在同一台服务器上创建多个具有相同INSTANCE_NAME的实例。
首先确认当前的参数文件:

bash-2.03$ cd $ORACLE_HOME/dbs
bash-2.03$ ls initeygle.ora 
initeygle.ora

复制参数文件,更改名称:

bash-2.03$ cp initeygle.ora initjulia.ora
 

接下来通过导入新的ORACLE_SID就可以启动新的实例:

bash-2.03$ export ORACLE_SID=julia
bash-2.03$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on Fri Feb 16 10:34:00 2007
Copyright (c) 1982, 2002, Oracle Corporation.? All rights reserved.
Connected to an idle instance.
SQL> startup nomount;
ORACLE instance started.
Total System Global Area? 303532408 bytes
Fixed Size?????????????????? 731512 bytes
Variable Size???????????? 184549376 bytes
Database Buffers????????? 117440512 bytes
Redo Buffers???????????????? 811008 bytes

现在ORACLE_SID为julia的实例已经启动,操作系统上的进程以julia名称标记:

bash-2.03$ ps -ef|grep pmon
oracle?? 12396???? 1? 0 16:30 ???????? 00:00:00 ora_pmon_julia
oracle?? 16201???? 1? 0 18:13 ???????? 00:00:00 ora_pmon_eygle
oracle?? 16256 16219? 0 18:14 pts/1??? 00:00:00 grep pmon

但是新实例的instance_name仍然是eygle:

SQL> show parameter instance_name
NAME???????????????????????????????? TYPE?????????????????? VALUE
------------------------------------ ---------------------- -----------------------
instance_name??????????????????????? string???????????????? eygle


总结一下,ORACLE_SID在这里用于标示进程,而instance_name则用来标示实例,两者可以具有不同的名称。
此外Oracle的监听器(listener)配置文件中的SID_NAME就是来自instance_name参数,监听器通过instance_name才能确定需要将连接请求注册到哪一个实例上。通常listener.ora文件中SID_NAME相关设置类似如下示例:

SID_LIST_LISTENER =
(SID_DESC =
(GLOBAL_DBNAME = eygle)
(ORACLE_HOME = /opt/oracle/product/9.2.0)
(SID_NAME = eygle) 
)

?

?

?

/////////////////////////////////////////////////

/////////////////////////////////////////////////

///////////////////////////////////////////////////

?

??? 呵呵,自学oracle快2个月了,还是一些基本概念没搞清楚。今天无意看了资料,再结合以前所遇见的情况,操作,总算把标题的一些概念搞清楚了。

数据库名??

??? 数据库名是用于区分数据库的一个内部标识,是以二进制方式存储在数据库控制文件中的参数。数据库创建之后不能再修改这个参数。数据库创建后,它被写入数据库参数文件pfile或Spfile中。格式如下:

...

db_name="orcl"

db_domain=dbcenter.toys.com

instance_name=orcl

service_names=orcl.dbcenter.toys.com

...

?

数据库实例名

??? 数据库实例是操作数据库的实体,用户通过实例与数据库交互。实例名用来标识这个数据库实例。数据库创建后,实例名可以被修改。也在数据库参数文件pfile或Spfile中。格式如下:

...

instance_name=orcl

service_names=orcl.dbcenter.toys.com

...

??? 数据库名与实例名可以相同。一个数据库对应一个实例的情况下设置成相同的便于标识数据库。但是在8i,9i的并行服务器中,数据库与实例不存在一一对应关系,而是一对多关系,一个数据库对应多个实例。不过一个用户只能与一个实例相连。(这里才让人恍然大悟,实例名与数据库名的区别就很容易理解了)

?

数据库域名

??? 在分布式数据库系统中,不同版本的数据库服务器之间,不论运行的操作系统是unix或是windows,各服务器之间都可以通过数据库链路进行远程复制,数据库域名主要用于oracle分布式环境中的复制。举例说明如:
全国交通运政系统的分布式数据库,其中:
福建节点: fj.jtyz
福建厦门节点: xm.fj.jtyz
江西: jx.jtyz
江西上饶:sr.jx.jtyz
这就是数据库域名。
数据库域名在存在于参数文件中,他的参数是db_domain.

?

操作系统环境变量(ORACLE_SID)

??? 数据库实例名有时使用实例名(Instance_name),有时使用ORACLE_SID。这两个都是数据库实例名,不易区分。实际上,instance_name参数是ORACLE数据库的参数,可以再初始化参数文件中查询到,而ORACLE_SID参数则是操作系统的环境变量。

(点击图片更清晰)