今天一个客户配置数据库连接失败,搞半天没搞出来,上网搜发现了下面的帖子,一试真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数据库常见问题及解决方法
之前用PL/SQL DEVELOPER和SQLPLUS 登录数据库都没有问题,就是应用程序通过JDBC连接Oracle时无法成功连接,出现ORA-12505错误listener does not currently know of SID given in connect descriptor
powerbuilder9 连接 oracle 10g (使用 jdbc 来连接)
如果该值设置不正确,将导致PL/SQL Developer连接数据库后,查看的数据会出现乱码。 5、下载并安装PL.SQL.Developer配置应用 配置tools->preferences->connection Oracle Home D:/instantclient_11_2 OCI ...
oracle连接数据库驱动包,oracle jdbc 开发驱动。一般装有装oracle就有这个东西啊,在这个文件夹里,Oracle安在c盘c:\oracle\ora92\jdbc\lib。Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款...
在 %oracle_home%\ora81\jdbc\lib 下有一个 classes12.zip 和 nls_charset12.zip 把这两个文件分别解压的临时目录下,进入这两个目录 用 jar -cvf classes12.jar * 创建classes12.jar 和 nls_cahrset12.jar 把这两个...
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:...
mysql、mysql8、oracle、sqlserver、db2、postgresql、神通(神舟通用)、upbase(上荣)、highgo(瀚高)、kingbase、kingbase8、gbase、gbase8s、达梦
C、根据当前目录下的connect.json配置数据库连接数据库访问,打印执行SQL 2、作用 A、避免手工操作的多个代码输入检查 传统检查操作如下: X、通过top找出占用资源的Oracle进程 Y、通过ps确定这个Oracle进程所...
DatabaseName=pubs","sa","" <br>com.mysql.jdbc.Driver<br>jdbc:mysql://localhost/DataBaseName<br><br>oracle.jdbc.driver.OracleDriver<br>jdbc:oracle:thin:@10.0.0.248:1521:ora9,"",""
JDBC连接数据库的步骤: 1.注册驱动(加载驱动): 注册的方式: 1.使用类加载器(使用反射的方式) Class.forName(driverName); 2.实例化Driver Driver driver = new oracle.jdbc.driver.OracleDriver(); ...
数据库连接的url.默认空字符串 如果有url参数,则-i-p-s-dn参数全无效。 如果没有url参数,则必须提供-i-p-s参数,程序里面好拼凑url 例如: jdbc:sqlserver://localhost:1433; DatabaseName=sample -i ip address:...
(2) 不需要安装Oracle客户端,解压即用,通过提供的JDBC直接连接服务器; (3) 超智能的SQL编辑器,具有代码跟踪提示功能,弹出提示窗口列出关键字、关键字组合、函数名、列名、对象名、对象类型等,极大地提高SQL...
TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置TNS也可以连接Oracle数据库,比如通过JDBC.如果通过TNS...
此项目为一个空结构的完整框架...DB.url=jdbc:oracle:thin:@localhost:1521:ora10g DB.driverClassName=oracle.jdbc.driver.OracleDriver DB.username=pm_bate1 DB.password=123456 项目直接解压可在ECLIPSE中运行....
//连接数据库 sqlCon = java.sql.DriverManager.getConnection(strCon,"hzq","hzq"); //创建一个可以滚动的只读的SQL语句对象 sqlStmt = sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_...
5、指定需要连接的实例名字,在D:\OracleInstantClient_11_1目录下新建一个tnsnames.ora文件,然后填入 192.168.8.201 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.201)...
5、指定需要连接的实例名字,在D:\OracleInstantClient_11_1目录下新建一个tnsnames.ora文件,然后填入 192.168.8.201 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.201)...
错误示例:让 c 成为 Oracle 数据库的连接对象,当您使用字符串输入查询存储过程时,例如: x = runstoredprocedure(c,'myprocinonly',{2500,'Jones'}) 然后出现错误: ??? 发生Java异常: java.sql....