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是数据库实例的名字,每个实例各不相同。