`

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

分享到:
评论

相关推荐

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

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

    JDBC连接数据库字符串大全

    JDBC连接数据库字符串是连接数据库的关键部分,它包含了所有必要的信息,如驱动类、数据库URL、数据库名、主机地址、端口号以及可能的其他参数。 以下是一些主流数据库的JDBC连接字符串示例: 1. **SQL Server ...

    在android中用jdbc连接数据库

    总之,虽然在Android中直接使用JDBC连接数据库不是首选方案,但在特定场景下,如与远程服务器通信,它是可行的。重要的是要确保遵循最佳实践,确保应用程序的安全性和性能。在实际项目中,通常推荐使用云API、...

    JDBC连接不同数据库时的设置

    ### JDBC连接不同数据库时的设置 #### 一、概述 Java Database Connectivity (JDBC) 是 Java 开发者访问关系型数据库的标准接口。它提供了一种统一的方式来与各种类型的数据库进行交互,包括但不限于 Oracle、...

    数据库JDBC连接.txt

    ### 数据库JDBC连接知识点详解 #### 一、概述 JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了...希望本文能够帮助您更好地理解和使用JDBC连接数据库。

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

    PowerBuilder 作为一款强大的应用开发工具,支持多种数据库连接方式,其中包括通过 JDBC(Java Database Connectivity)来连接 Oracle 数据库。本文将详细介绍如何在 PowerBuilder 9 中配置并实现与 Oracle 10g ...

    kettle连接oracle12C--报错ORA-28040 没有匹配的验证协议.rar

    7. **Kettle的JDBC连接配置**:在Kettle的数据库连接配置中,除了提供正确的URL、用户名和密码,还需根据实际情况填写额外的连接属性,如`useSSL`、`trustServerCertificate`等。 解决"ORA-28040"错误可能需要逐个...

    java中jdbc链接数据库大全.doc

    本文将深入解析使用JDBC连接不同数据库的方法,包括SQL Server、MySQL、Oracle、DB2、Sybase、Informix以及PostgreSQL,为开发者提供全面的指导。 ### 1. 连接SQL Server 2000 要使用JDBC连接到SQL Server 2000,...

    jdbc连接oracle三种方式

    Java JDBC (Java Database Connectivity) 是Java程序连接数据库的标准接口,Oracle数据库作为广泛应用的关系型数据库,提供了多种通过JDBC进行连接的方式。本篇文章将详细介绍通过JDBC Thin Driver连接Oracle的三种...

    Oracle 10g启动后报ORA-16038错误的解决方法

    ### Oracle 10g启动后报ORA-16038错误的解决方法 #### 错误概述 在启动Oracle 10g数据库时遇到ORA-16038错误,该错误通常与归档日志操作有关。具体错误信息为: ``` ORA-16038: log 1 sequence #230 cannot be ...

    jdbc 连接mysql、oracle数据库的驱动

    本教程将详细讲解如何使用JDBC连接MySQL和Oracle数据库,以及涉及的相关驱动。 首先,我们需要了解JDBC的基本概念。JDBC提供了一套API,包括接口和类,用于在Java程序中执行SQL语句并与数据库进行交互。通过JDBC,...

    jdbc连接oracle jar包

    在Java程序中使用Oracle JDBC驱动连接数据库,首先需要将对应的JAR文件添加到项目的类路径中。例如,将`ojdbc.jar`放在`lib`目录下,确保运行时能够找到。然后,你可以按照以下步骤建立连接: 1. 导入必要的JDBC类...

    如何连接oracle数据库及故障解决办法

    首先,在连接 Oracle 数据库之前,需要在客户端机器上安装 Oracle 的客户端软件,唯一的例外就是 Java 连接数据库的时候,可以用 JDBC thin 模式,不用装 Oracle 的客户端软件。如果你已经安装了 Oracle 数据库,...

    JDBC链接oracle数据库

    本教程将详细介绍如何使用JDBC连接Oracle数据库,特别适合初学者学习。 首先,确保你已经安装了Oracle数据库和对应的JDBC驱动(Oracle JDBC Driver,也称为ojdbc.jar)。Oracle JDBC驱动通常包含在Oracle数据库的...

    JAVA通过JDBC连接ORACLE9I

    我们需要配置环境变量,加载驱动程序,连接数据库,执行SQL语句,处理异常等。通过这种方式,JAVA程序可以连接和操作ORACLE9I数据库。 八、相关知识点 * JDBC(Java Database Connectivity) * ORACLE9I数据库 * ...

    java 用jdbc方式以 sys账号连接oracle数据的问题

    本文将深入探讨如何通过Java的JDBC接口以sys用户连接到Oracle数据库,并解决可能遇到的问题。 首先,我们需要了解JDBC的基本概念。JDBC是Java API,它提供了一组接口和类,使得Java应用程序能够与各种类型的数据库...

    Eclipse是如何连接Oracle数据库的

    1. **下载并定位JDBC驱动**:首先,从Oracle官方网站下载适合你Oracle数据库版本的JDBC驱动,并将其放置在指定目录下,例如`D:\oracle\ora92\jdbc\lib`。 2. **添加至项目库**:在Eclipse中,右击项目名称,选择...

    oracle数据库的clob大字段在jdbc中的处理方式

    1. **建立连接**:使用`DriverManager.getConnection()`方法建立到Oracle数据库的连接,确保已经正确配置了数据库驱动。 2. **预编译SQL语句**:创建`PreparedStatement`对象,预编译SQL查询,例如:`SELECT clob_...

    linux远程连接oracle数据库

    - Java环境的配置对于通过Java程序连接数据库至关重要。 #### 三、IP的设置 - **服务器端IP**: 192.168.0.101 - **客户端IP**: 192.168.0.105 - IP地址的正确设置是网络通信的基础。确保客户端和服务器端能够互相...

    各种数据库的连接说明

    使用JDBC连接SQL Server,代码如下: ```java Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection conn = DriverManager.getConnection("jdbc:sqlserver://主机名:端口号;databaseName=...

Global site tag (gtag.js) - Google Analytics