详细解答
详细
可以简单的这样理解:一个公司比喻成一台服务器,数据库是这个公司中的一个部门。 1.SID:一个数据库可以有多个实例(如RAC),SID是用来标识这个数据库内部每个实例的名字, 就好像一个部门里,每个人都有一个自己的名字。 2.SERVICE_NAME:是这个数据库对外宣称的名字,外面的人要想连接我这个数据库, 你就在客户端的连接串里写上service_name。它就像一个部门的名字,这个部门的名称在看门大爷(listener)那里有登记, 看门大爷一看你是要找SERVICE_NAME这个部门,就告诉你我们公司确实有这个部门,于是你就找到了,连接就建立了。
一句话来说就是:SID是对内的,是实例级别的一个名字,用来内部之间称呼用。SERVICE_name是对外的, 是数据库级别的一个名字,用来告诉外面的人,我数据库叫"SERVICE_NAME"。 你可以通过service_name参数指定这个名字是什么,可以有多个名字,名字随便起,叫狗蛋,翠花都没关系。 如果你不指定,默认的是Db_name. Db_domain,也就是global_name。 数据库里,还有ORACLE_SID,是告诉OS系统,我这个实例叫做什么。这些易混淆的名字,你要记住, 他们不是指数据库,就是指实例,就这两个东西,别无其它。他们具体用哪个名字,是要看对谁而言, 是什么场合。是对数据库,还是对操作系统,还是对外部链接。就像你对父母而言,你有小名叫幺儿; 对同学而言,你有外号叫灯泡;对办事机构,你有正规的名字叫王小明。但归根到底,是一回事。分清楚这点,就不容易混了。