ORA-12505 connection refuse 解决办法及总结

本文介绍了在使用Java JDBC连接Oracle数据库时遇到的问题及解决过程。主要问题是连接被拒绝,原因是提供的SID与Oracle服务器期望的不同。通过调整连接字符串中的SID为正确的instance_name解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在项目遇到一个问题,在用java中用jdbc连接oracle时出错,log中记录“connectin refuse(DESCRIPTION=(TMP=)(VSNNUM=168354658)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))”,采用的连接url是“jdbc:oracle:thin:@hostname:1521:ovsDB”, 由于连接的配置是在一个开发工具中进行的,于是写了一个简单的测试程序在eclipse中测试,结果是提示出错“ORA-12505 :listener does not currently know of SID given in connect descriptor”, oracle服务器的监听器不能识别这个SID, 本地的tnsnames.ora中是这样写的 
ovsDB =  (网络服务名)
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = remotehostname)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ovsDB)
    )
  )
SID和tnsnames.ora配置都是维护服务器的人给的,在使用"oracle SQL developer" 和sqlplus连接时都可以正常连接上,百思不得其解.
         在查阅了资料后,罪魁祸首指向SID,在此灰常感谢参考URL中的blog主人, 原因是工具在连接时只需给其指定service_name,而使用jdbc连接是则必须要SID, 使用oracle SQL developer连接上后执行select instance_name from v$instance后得出的instance_name是ovsDatabase,这个才是oracle服务器上的SID, 于是在url中使用这个SID连接,终于正常了!问题解决!
         在解决这个问题过程中,总结出的东东有:
           1. 工具在连接时只需给其指定service_name,而使用jdbc连接是则必须要在url中提供SID;
        2.客户端的tnsnames.ora中的网络服务名并不是SID,而是一个可任意命名的代号,oracle客户端或者其他连接工具在连接服务器是使用这个代号来解析其中的service_name.
参考URL:  http://www.blogjava.net/itspy/archive/2007/12/20/169072.html
http://www.hinn.cn/2009/04/oracle_sqlnetora_tnsnamesora_listenerora.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值