jdbc连接数据库使用sid和service_name的区别

转载 2016年08月26日 10:06:45
最近使用jdbc连接oracle时报错: 
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connection descriptor used by the client was: 
10.12.162.84:1521:xxxx 

登陆oracle数据发现在network/admin/文件夹下的tnsnames.ora中配置的是:SERVICE_NAME =xxxx。经过查询发现,是jdbc中的连接串使用的不正确。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 

linux下查询sid的方法: 
在配置oracle环境变量的情况可以使用 echo $ORACLE_SID,如果没有可以使用ps -ef |grep oracle 来查询: 
oracle    2548     1  0 Aug17 ?        00:00:00 ora_pmon_xxxx 
后面的xxxx就是对应的sid。 

在windows环境下,oracle是以后台服务的方式被管理的,所以看"控制面板->管理工具->服务 里面的名称:"OracleServiceORCL",则ORCL就是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与SERVICE_NAME的区别

Oracle中SID标记整个数据库管理系统实例,SERVICE_NAME标记某一数据库AIOSS72 =  (DESCRIPTION =    (ADDRESS_LIST =      (ADDRES...
  • onetree2010
  • onetree2010
  • 2010年12月29日 14:26
  • 1701

监听配置问题,SID(实例名)与SERVICE_NAME的区别?

这几天因为要连接远程oracle数据库,直接在本地安装好了oracle11g客户端后,环境变量配置完成,按以往的习惯用Net Configuration Assistant  进行了连接配置设置,生成...
  • qq_26991807
  • qq_26991807
  • 2017年05月05日 17:50
  • 1424

ORACLE中SID和SERVICE_NAME的区别

在讲解SID和SERVICE_NAME之前,先说一下实例。实例是操作系统中访问数据库所需要的一系列的进程和内存的集合。没有任何数据文件,实例也可以启动。但是要想访问数据库,必须把数据库文件加载进实例中...
  • zhangzl1012
  • zhangzl1012
  • 2016年02月26日 21:26
  • 16241

jdbc连接数据库使用sid和service_name的区别

最近使用jdbc连接oracle时报错:  ORA-12505, TNS:listener does not currently know of SID given in connect descr...
  • fengwei_mm
  • fengwei_mm
  • 2013年11月04日 16:47
  • 540

JDBC连接数据库使用SERVICE NAME、SID以及TNSName不同写法

本周使用jdbc连接客户的oracle时总提示超时。 一直使用SID来连接数据库的。尝试换成Service Name后连接成功。 Java JDBC Thin Driver 连接 Oracle有三种...
  • raymondual
  • raymondual
  • 2014年11月26日 15:09
  • 12473

jdbc sid 与 service name 使用方法及区别

最近使用jdbc连接oracle时报错:  ORA-12505, TNS:listener does not currently know of SID given in connect descri...
  • Huozhiwu_11
  • Huozhiwu_11
  • 2015年09月22日 16:21
  • 896

Oracle中的SID与SERVICE_NAME连接的区别

格式一: Oracle JDBC Thin using a ServiceName:  jdbc:oracle:thin:@//:/  Example: jdbc:oracle:thin:@//1...
  • u011399678
  • u011399678
  • 2016年08月19日 10:19
  • 1990

jdbc连接数据库使用sid和service_name的区别 ?

问题描述: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connec...
  • u013456370
  • u013456370
  • 2017年08月09日 15:12
  • 195

Oracle 中 db_name / service_name / sid 三者的关系和作用

db_name是一个实在的物理名称。service_name时带有域名的,因为如果两个数据库不再同一个域可以有相同的名称。而sid是数据库的实例名称,它是有SGA和后台进程组成。一个数据库只有一个db...
  • benbenkui
  • benbenkui
  • 2010年08月23日 12:01
  • 1347

Oracle 实例名/服务名 请问SID和Service_Name有什么区别啊?

可以简单的这样理解:一个公司比喻成一台服务器,数据库是这个公司中的一个部门。 1.SID:一个数据库可以有多个实例(如RAC),SID是用来标识这个数据库内部每个实例的名字,就好像一个部门里,每个人都...
  • z69183787
  • z69183787
  • 2014年05月13日 14:02
  • 32161
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jdbc连接数据库使用sid和service_name的区别
举报原因:
原因补充:

(最多只允许输入30个字)