老问题:ServiceName和sid的区别

搜了半天,也没搞清楚这两者的区别,可能是慧根不够
所以来这里问问大侠们:

网上一种比较多的说法:Service_name对应的是一个数据库,并不是实例,这样对于单实例的数据库是没有问题,
可是对于多实例的数据库,用service_name怎么对应到具体某一个实例呀,是不是改用sid来标识呢

然后又看到有大侠说sid是8i以前的写法,后来都是用的service_name。

哎,所以比较蛋疼,发个帖请教各位

作者: yhwxxx   发布时间: 2010-12-24

1. SID是实例名,实例名指的是用于响应某个数据库操作的数据库管理系统的名称。实例名是由初始化参数文件的参数instance_name决定的。如果这个参数不被指定(即instance_name没有被指定为任何值),那么实例的名字由该用户的环境变量ORACLE_SID(注意这里是大写)决定。在windows平台下,则是注册表中oracle_sid值决定。


2. SERVICE_NAME指的是listener中的全局数据库名:这个名字是由listener.ora中GLOBAL_DBNAME参数决定的。这个名字代表的是客户端连接到数据库时,tnsnames.ora中SERVICE_NAME参数所对应的值。

作者: Oraclefans_   发布时间: 2010-12-24

实例是由SGA和后台进程构成。你启动一个实例对应一个sid
servername代表了你的整个数据库,不仅仅包含后台进行,SGA,他还包含数据库的其他的对像,比如数据字典,数据文件。一个servername可以对应多个sid
我的理解。。。呵呵。。不对的可以请侠士斧正。。。

作者: Oraclefans_   发布时间: 2010-12-24

SID是唯一标识你数据库的实例名称,用来登录你标识的数据库,而ServiceName主要是客户端连接DB的,通过客户端的Tnsnames.ora文件设置的,
比如你有一个数据库实例SID,但是有多个客户端访问你这个数据库,那么每个客户端的Tnsnames.ora文件里配置的ServiceName就是用来提供给客户端登录访问你的数据库的
说的简单点就是,SID就是你DB,而ServiceName只是用来connecting DB的别名

作者: gelyon   发布时间: 2010-12-24

引用 3 楼 gelyon 的回复:

SID是唯一标识你数据库的实例名称,用来登录你标识的数据库,而ServiceName主要是客户端连接DB的,通过客户端的Tnsnames.ora文件设置的,
比如你有一个数据库实例SID,但是有多个客户端访问你这个数据库,那么每个客户端的Tnsnames.ora文件里配置的ServiceName就是用来提供给客户端登录访问你的数据库的
说的简单点就是,SID就是你DB,而ServiceNam……

???????????????????????????????、、、?????????

作者: Oraclefans_   发布时间: 2010-12-24

引用 2 楼 oraclefans_ 的回复:

实例是由SGA和后台进程构成。你启动一个实例对应一个sid
servername代表了你的整个数据库,不仅仅包含后台进行,SGA,他还包含数据库的其他的对像,比如数据字典,数据文件。一个servername可以对应多个sid
我的理解。。。呵呵。。不对的可以请侠士斧正。。。


我也是这么理解的,可是用net assist添加本地配置的时候要填service_name,所以感觉不是很理解,我新手,谢谢大家

作者: yhwxxx   发布时间: 2010-12-24

引用 5 楼 yhwxxx 的回复:

引用 2 楼 oraclefans_ 的回复:

实例是由SGA和后台进程构成。你启动一个实例对应一个sid
servername代表了你的整个数据库,不仅仅包含后台进行,SGA,他还包含数据库的其他的对像,比如数据字典,数据文件。一个servername可以对应多个sid
我的理解。。。呵呵。。不对的可以请侠士斧正。。。


我也是这么理解的,可是用net assist添加本地配置的时候要填service_name,所以感觉不是很理解,我新手,谢谢大家

添加 的是别名。

作者: iihero   发布时间: 2010-12-24