搜了半天,也没搞清楚这两者的区别,可能是慧根不够
所以来这里问问大侠们:网上一种比较多的说法:Service_name对应的是一个数据库,并不是实例,这样对于单实例的数据库是没有问题,
可是对于多实例的数据库,用service_name怎么对应到具体某一个实例呀,是不是改用sid来标识呢然后又看到有大侠说sid是8i以前的写法,后来都是用的service_name。哎,所以比较蛋疼,发个帖请教各位

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   


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

  5.   


    谢谢iihero。
    你这么一说我倒是有了点概念,不过有两个疑问哦:
    1、你说的别名是指DYNSNAP_local?还是DynSnap,DYNSNAP_local =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 172.12.73.101)(PORT = 1521))
        )
        (CONNECT_DATA =
          (Service_name = DynSnap)
        )
      )
    2、多实例情况下,该如何写连接字符串呢
      

  6.   

    指的是这个DYNSNAP_local,是你客户端程序连接时使用的service name, 根据这个别名,从tnsnames.ora,oracle找到真正的service_name: DynSnap. 这个在以往老的oracle8i中指的就是SID.
    现在connet_data, 大多使用sid来描述。
      

  7.   

    共勉!学习!
    举个简单的例子--相同时
    ORCL =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = orcl)
        )
      )--不同时
    ORCL2 =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = orcl)
        )
      )
      

  8.   

    SID
    A unique name for an Oracle Database instance. To switch between instances of Oracle Database, users must specify the desired system identifier. The system identifier is included in the CONNECT DATA parts of the connect descriptors in a tnsnames.ora file, and in the definition of the network listener in a tnsnames.ora file.net service nameThe name used by clients to identify an Oracle Net server and the specific system identifier or database for the Oracle Net connection. A net service name is mapped to a port number and protocol. Also known as a connect string, database alias, host string, or service name.
      

  9.   

    我现在遇到的情况是这样的:-- 这个是用的是Service_name
    ORCL =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = orcl.27.0.0.1)
        )
      )-- 这个是SID
    ORCL =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        )
        (CONNECT_DATA =
          (sid = orcl)
        )
      )之前拼字符串是用的sid,可最近在使用直接使用Oracle的本地网络服务配置工具时,连接时提示服务名有误,找到tnsnames.ora发现设置的是Service_name= orcl,而不是sid=orcl,所以就问下这两者的区别。查 的一些资料都说service_name对应的是数据库,而sid是对应的是实例,要是这样的话觉得用sid品字符串是不是更合适些呢
      

  10.   

    两个的意思一样的 
    就如你有个名字 还有个外号
    外号是别人叫你的(用于外部链接的,这里就如其他客户端链接上你的数据库 所用到的seveice_name)sid 是数据库服务本身的一个实例区分而已
      

  11.   

    这么去想:
    在没有考虑rac等特殊情况下,你的实例名就代表了你的数据库 一对一的关系
    你的servicename就是你这个数据库名的一个别名,它是用来让客户端链接你的数据库的时候一个标志。
      

  12.   

    sid是不可改变的,SERVICE是别名例如 字段名是唯一的,可是可以有多个别名,
      

  13.   

    Service_name:该参数是由oracle8i引进的。在8i以前,使用SID来表示标识数据库的一个实例,但是在Oracle的并行环境中,一个数据库对应多个实例,这样就需要多个网络服务名,设置繁琐。为了方便并行环境中的设置,引进了Service_name参数,该参数对应一个数据库,而不是一个实例,而且该参数有许多其它的好处。该参数的缺省值为Db_name. Db_domain,即等于Global_name。一个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即不必Service name 必须与SID一样。
      

  14.   

    (⊙o⊙)…再问一个问题就结贴:
    用dbca添加的是数据库还是实例,
    如何添加多实例?