- 论坛徽章:
- 0
|
Instance_name 的作用
今天看了一本oracle 的书,突然堆instance_name的概念又糊涂起来
书上的意思是
一个unix操作系统上,可以有装两个Oracle数据库软件,并且ORACLE_SID都是一个名称,例如都是AAA
书上没有证明说怎么去安装两个Oracle数据库软件,但是肯定是在不同用户下安装
但是按照平时理解,转贴这段
"
三、操作系统环境变量(ORACLE_SID)
在实际中,对于数据库实例名的描述有时使用实例名(instance_name)参数,有时使用ORACLE_SID参数。这两个都是数据库实例名,它们有什么区别呢?(经常弄混)
代码:
(ORACLE_SID)
OS<----------------> ORACLE 数据库 <--------(Instance_name(实例名))
上图表示实例名instance_name、ORACLE_SID与数据库及操作系统之间的关系,虽然这里列出的两个参数都是数据库实例名,但instance_name参数是ORACLE数据库的参数,此参数可以在参数文件中查询到,而ORACLE_SID参数则是操作系统环境变量。
操作系统环境变量ORACLE_SID用于和操作系统交互。也就是说,在操作系统中要想得到实例名,就必须使用ORACLE_SID。此参数与ORACLE_BASE、ORACLE_HOME等用法相同。在数据库安装之后,ORACLE_SID被用于定义数据库参数文件的名称。如:
$ORACLE_BASE/admin/DB_NAME/pfile/init$ORACLE_SID.ora。
定义方法:
代码:
export ORACLE_SID=orcl
如果在同一服务器中创建了多个数据库,则必然同时存在多个数据库实例,这时可以重复上述定义过程,以选择不同实例。
"
即SID是用来操作系统和数据库来交互的,更专业的说法是 操作系统fork的进程根据ORACLE_SID来建立的.
这就问题来了 ,可是书上明明写着,可以同时启动两个ORACLE_SID重名的实例哦.
这不是矛盾吗?
fork的时候是否还把用户也作为了一个关键字,然后再加上ORACLE_SID,这样就区分了不同的ORACLE实例进程
只是我的疑问是
jdbc racle:thin 10.71.139.51:1521:ttt
即使用 java的jdbc连接的时候,这个tttt是$ORACLE_SID还是instance_name
如果是$ORACLE_SID???
另外,Instance_name 似乎也有些多余(这个理解我应当不正确)
再ZT一段
"
数据库实例名则用于和操作系统之间的联系,用于对外部连接时使用。
在操作系统中要取得与数据库之间的交互,必须使用数据库实例名。
例如,要和某一个数据库server连接,就必须知道其数据库实例名,
只知道数据库名是没有用的,与数据库名不同,
在数据安装或创建数据库之后,实例名可以被修改。数据库安装完成后,
该实例名被写入数据库参数文件pfile中,格式如下:
代码:
db_name="orcl" #(不允许修改)
db_domain=dbcenter.toys.com
instance_name=orcl #(可以修改,可以与db_name相同也可不同)
service_names=orcl.dbcenter.toys.com
control_file=(...............
.........
数据库名与实例名之间的关系。
数据库名与实例名之间的关系一般是一一对应关系,有一个数据库名就有一个实例名,如果在一个服务器中创建两个数据库,则有两个数据库名,两个数据库实例名,用两个标识确定一个数据库,用户和实例相连接。
但在8i、9i的并行服务器结构中,数据库与实例之间不存在一一对应关系,而是一对多关系,(一个数据库对应多个实例,同一时间内用户只一个实例相联系,当某一实例出现故障,其它实例自动服务,以保证数据库安全运行。)
"
其实操作系统通过SID就能找到对应实例了,可是现在还要一个实例名
按照那本书上的说法
在 lisener.ora这个文件中
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = aaa
(ORACLE_HOME = /opt/oracle/oracle/product/10.2.0/db_1)
(PROGRAM = extproc)
)
)
这个SID_NAME是instance_name,不是$ORACLE_SID,而我一直认为是$ORACLE_SID
因为我当初的理解是监听器应当监听进程啊,不应当是实例啊
那么我总结一下 用户访问Oracle数据库的过程
远端用户 从先访问Oracle所在主机,需要IP;然后再访问ORACLE进程,通过$ORACLE_SID,然后在访问对应的实例,通过instance_name
,最后访问数据库,通过db_name
这样理解对吗?大虾指较啊? |
|