Oracle服务名实例名,Service_name和Sid的区别
Service_name 和Sid的区别
Service_name:该参数是由oracle8i引进的。
在8i以前,使⽤SID来表⽰标识数据库的⼀个实例,但是在Oracle的并⾏环境中,⼀个数据库对应多个实例,这样就需要多个⽹络服务名,设置繁琐。为了⽅便并⾏环境中的设置,引进了Service_name参数,该参数对应⼀个数据库,⽽不是⼀个实例,⽽且该参数有许多其它的好处。
该参数的缺省值为Db_name. Db_domain,即等于Global_name。⼀个数据库可以对应多个Service_name,以便实现更灵活的配置。该参数与SID没有直接关系,即不必Service name 必须与SID⼀样。Sid是数据库实例的名字,每个实例各不相同。
可以简单的这样理解:
⼀个公司⽐喻成⼀台服务器,数据库是这个公司中的⼀个部门。
SID:⼀个数据库可以有多个实例(如RAC),SID是⽤来标识这个数据库内部每个实例的名字,就好像⼀个部门⾥,每个⼈都有⼀个⾃⼰的名字。
SERVICE_NAME:是这个数据库对外宣称的名字,外⾯的⼈要想连接我这个数据库,你就在客户端的连接串⾥写上service_name。它就像⼀个部门的名字,这个部门的名称在看门⼤爷(listener)那⾥有登记,
看门⼤爷⼀看你是要SERVICE_NAME这个部门,就告诉你我们公司确实有这个部门,于是你就到了,连接就建⽴了。
⼀句话来说就是:SID是对内的,是实例级别的⼀个名字,⽤来内部之间称呼⽤。SERVICE_name是对外的,是数据库级别的⼀个名字,⽤来告诉外⾯的⼈,我数据库叫"SERVICE_NAME"。
Java JDBC Thin Driver 连接 Oracle有三种⽅法:
格式⼀: Oracle JDBC Thin using a ServiceName:
jdbc:oracle:thin:@//<host>:<port>/<service_name>
Example: jdbc:oracle:thin:@//192.168.2.1:1521/XE数据库实例名是什么意思
注意这⾥的格式,@后⾯有//, 这是与使⽤SID的主要区别。
这种格式是Oracle 推荐的格式,因为对于集来说,每个节点的SID 是不⼀样的,
但是SERVICE_NAME 确可以包含所有节点。
格式⼆: Oracle JDBC Thin using an SID:
jdbc:oracle:thin:@<host>:<port>:<SID>
Example: jdbc:oracle:thin:@192.168.2.1:1521:X01A
Note:
Support for SID is being phased out. Oracle recommends that users switch over to usingservice names.
格式三:Oracle JDBC Thin using a TNSName:
jdbc:oracle:thin:@<TNSName>
Example: jdbc:oracle:thin:@GL
Note:
Support for TNSNames was added in the driver release 10.2.0.1``