`

jdbc连接数据库 报ora 12505

    博客分类:
  • jdbc
阅读更多

今天一个客户配置数据库连接失败,搞半天没搞出来,上网搜发现了下面的帖子,一试真OK了,先摘下来,回头再整理:

http://www.blogjava.net/itspy/archive/2007/12/20/169072.html

 

Oracle 
问题描述:
今天使用jdbc连接oracle 10.2.0.1.0 数据库的时候出现了下列错误:

Connection refused(DESCRIPTION=(TMP=)(VSNNUM=153093120)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))

而直接通过plsql可以正常连接数据库,或者可以通过sqlplus 连接数据库

经过debug和查找相关的资料发现问题原因如下:
jdbc连接数据库的时候,需要使用数据库的sid_name,而不是数据库的services_name
而使用plsql连接数据库的时候,只需要数据库的services_name即可,所以修改连接字符串中的services_name 为sid_name

附:
察看数据库中当前的sid:

SQL> select INSTANCE_NAME from v$instance;

INSTANCE_NAME
----------------
hasl

 

 

哈哈,终于找到答案了:

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

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

分享到:
评论

相关推荐

    JDBC连接Oracle数据库常见问题及解决方法

    JDBC连接Oracle数据库常见问题及解决方法

    Oracle SQL Developer连接报错(ORA-12505)的解决方案(两种)

    之前用PL/SQL DEVELOPER和SQLPLUS 登录数据库都没有问题,就是应用程序通过JDBC连接Oracle时无法成功连接,出现ORA-12505错误listener does not currently know of SID given in connect descriptor

    powerbuilder9 连接 oracle 10g (使用 jdbc 来连接)

    powerbuilder9 连接 oracle 10g (使用 jdbc 来连接)

    本机不安装ORACLE直接连接服务器上的ORACLE

    如果该值设置不正确,将导致PL/SQL Developer连接数据库后,查看的数据会出现乱码。 5、下载并安装PL.SQL.Developer配置应用 配置tools-&gt;preferences-&gt;connection Oracle Home D:/instantclient_11_2 OCI ...

    ojdbc6.jar,ojdbc8.jar

    oracle连接数据库驱动包,oracle jdbc 开发驱动。一般装有装oracle就有这个东西啊,在这个文件夹里,Oracle安在c盘c:\oracle\ora92\jdbc\lib。Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款...

    Tomcat 5 服务器与 Oracle 数据库连接

    在 %oracle_home%\ora81\jdbc\lib 下有一个 classes12.zip 和 nls_charset12.zip 把这两个文件分别解压的临时目录下,进入这两个目录 用 jar -cvf classes12.jar * 创建classes12.jar 和 nls_cahrset12.jar 把这两个...

    Oracle数据库url连接最后一个orcl代表的是配置的数据库SID

    ORA-12505, TNS:listener does not currently know of SID given in connect desc . 后面看了下,我的数据库配置为: driverClassName=oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@158.58.88.102:1521:...

    数据库连接驱动.rar

    mysql、mysql8、oracle、sqlserver、db2、postgresql、神通(神舟通用)、upbase(上荣)、highgo(瀚高)、kingbase、kingbase8、gbase、gbase8s、达梦

    获取top前10个Oracle的进程(支持多实例)

    C、根据当前目录下的connect.json配置数据库连接数据库访问,打印执行SQL 2、作用 A、避免手工操作的多个代码输入检查 传统检查操作如下: X、通过top找出占用资源的Oracle进程 Y、通过ps确定这个Oracle进程所...

    JavaDbLib.JAVA数据库驱动

    DatabaseName=pubs","sa","" &lt;br&gt;com.mysql.jdbc.Driver&lt;br&gt;jdbc:mysql://localhost/DataBaseName&lt;br&gt;&lt;br&gt;oracle.jdbc.driver.OracleDriver&lt;br&gt;jdbc:oracle:thin:@10.0.0.248:1521:ora9,"",""

    jdbc基础和参考

    JDBC连接数据库的步骤: 1.注册驱动(加载驱动): 注册的方式: 1.使用类加载器(使用反射的方式) Class.forName(driverName); 2.实例化Driver Driver driver = new oracle.jdbc.driver.OracleDriver(); ...

    ORACLE,mysql,sqlserver,sybase数据库装文本软件

    数据库连接的url.默认空字符串 如果有url参数,则-i-p-s-dn参数全无效。 如果没有url参数,则必须提供-i-p-s参数,程序里面好拼凑url 例如: jdbc:sqlserver://localhost:1433; DatabaseName=sample -i ip address:...

    Oracle SQL Hand-Oracle工具 v5.1.zip

    (2) 不需要安装Oracle客户端,解压即用,通过提供的JDBC直接连接服务器; (3) 超智能的SQL编辑器,具有代码跟踪提示功能,弹出提示窗口列出关键字、关键字组合、函数名、列名、对象名、对象类型等,极大地提高SQL...

    oracle TNS 浅析

    TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置TNS也可以连接Oracle数据库,比如通过JDBC.如果通过TNS...

    SpringMVC+Spring+Hibernate+JPA空项目

    此项目为一个空结构的完整框架...DB.url=jdbc:oracle:thin:@localhost:1521:ora10g DB.driverClassName=oracle.jdbc.driver.OracleDriver DB.username=pm_bate1 DB.password=123456 项目直接解压可在ECLIPSE中运行....

    jsp + oracle分页简单实用

    //连接数据库 sqlCon = java.sql.DriverManager.getConnection(strCon,"hzq","hzq"); //创建一个可以滚动的只读的SQL语句对象 sqlStmt = sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_...

    oracle即时客户端 64位 11g

    5、指定需要连接的实例名字,在D:\OracleInstantClient_11_1目录下新建一个tnsnames.ora文件,然后填入 192.168.8.201 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.201)...

    oracle即时客户端 64位 10g

    5、指定需要连接的实例名字,在D:\OracleInstantClient_11_1目录下新建一个tnsnames.ora文件,然后填入 192.168.8.201 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.201)...

    一个错误修复的运行存储过程。m:官方运行存储过程中有一个错误。 此文件修复了错误。-matlab开发

    错误示例:让 c 成为 Oracle 数据库的连接对象,当您使用字符串输入查询存储过程时,例如: x = runstoredprocedure(c,'myprocinonly',{2500,'Jones'}) 然后出现错误: ??? 发生Java异常: java.sql....

Global site tag (gtag.js) - Google Analytics