[转帖]Oracle数据库SID和ServiceName的区别

Oracle数据库SID和ServiceName的区别

https://www.jianshu.com/p/dd3f3144133c

其实发现 @ 后面可以不添加 // 也可以的.

直接再 service_name前面将 : 修改为 / 就可以了. 

 

最近在为客户做监控系统、数据库的项目,用的是Zabbix平台。在最终实施的时候,发现有的Oracle数据库可以正常连接,有的报错……

ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connection descriptor used by the client was: 

在咨询过数据库运维人员发现,有的数据库给的是SID,有的给的是Service Name。而jdbc连接数据库有三种方式。

1. ServiceName方式

这种方式是Oracle推荐的,对于集群来说,每个节点的SID可能不一致,但ServiceName是一致的,包含所有节点。

ServiceName连接方式,是在Oracle 8i之后加入的。

jdbc:oracle:thine:@>:>/<ServiceName> 

2. SID方式

这是我们在部署的时候预置的连接方式,格式为:

jdbc:oracle:thine:@>:>:<SID> 

3. TNSName方式

TNSName连接方式是在Oracle 10.2.0.1之后加入的。

jdbc:oracle:thin:@ 

4. ServiceName和SID的区别

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

你可能感兴趣的:([转帖]Oracle数据库SID和ServiceName的区别)