当前位置: 代码迷 >> 综合 >> ORA-12505 web服务器连接数据库错误
  详细解决方案

ORA-12505 web服务器连接数据库错误

热度:2   发布时间:2023-12-20 12:36:10.0
问题描述:
之前给开发在生产环境新建了数据库用户,今天开发反映测试连接的时候无法从web服务器端连接到数据库。

报错如下:
java.sql.SQLException: Listener refused the connection withthe following error: 
ORA-12505, TNS:listener does not currently know of SID givenin connect descriptor 
The Connection descriptor used by the clientwas: 
ip:1521:abcd (不是实际的配置)

atoracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:111) 
atoracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:260) 
atoracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:386) 
atoracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:419) 
atoracle.jdbc.driver.T4CConnection.(T4CConnection.java:164) 
atoracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:34) 
atoracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:752) 

web服务器端的应用连接配置:(不是实际的配置)
jdbc.url=jdbc:oracle:thin:@ip:1521:abcd 
jdbc.username=username
jdbc.password=xxxxx


问题分析:
首先先用上面的用户名密码在本地用plsql developer进行登录测试,可以登录。
说明密码没有问题。
然后上网查一下ora-12505的解决方法,大部分都是说要改listener.ora的配置。
由于是生产库,肯定不行。
后来想到,这个生产库是rac结构,有两个节点,开发在连接配置中的abcd实际上是service_name,
而不是sid_name。而实际的sid是abcd1和abcd2,所以在连接的时候会报无法识别sid的错误。

问题解决:
所以只需要在连接配置中指定service_name。
使用如下连接配置即可:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ip地址)(PORT=1521))(CONNECT_DATA=

(SERVER=DEDICATED)(SERVICE_NAME=abcd)))
使用完整的连接串来指定service_name就能成功连接了。

  相关解决方案