我已经在我的windows 7 64位操作系统中安装了Oracle 11g Express Edition Release 2,并试图执行JDBC程序,然后我得到了以下错误:

java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.jlcindia.jdbc.JDBCUtil.geOracleConnection(JDBCUtil.java:28)
    at Lab3O.main(Lab3O.java:15)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:385)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
    ... 8 more

当前回答

我找到了这个异常的一些原因。他们是

1)默认为数据库XE的名称。因此url将是“jdbc:oracle:thin:@localhost:1521:XE”。

2)确保OracleServiceXE,OracleXETNSListener正在运行。它将在控制面板\所有控制面板项\管理工具\服务

其他回答

我通过纠正jdbc字符串解决了这个问题。

例如,正确的jdbc字符串应该是…

jdbc:oracle:thin:@myserver:1521/XE

但是我使用的jdbs字符串是…

jdbc:oracle:thin:@myserver:1521:XE

(注:在1521和XE之间应该是a /)

这个糟糕的jdbc字符串也给了我一个ORA-12505错误。

我还没有看到广泛讨论的一种可能性是,在主机上解析主机名本身可能存在问题。如果在/etc/hosts中没有$(hostname)条目,Oracle侦听器会感到困惑,不会出现。

这原来是我的问题,在/etc/hosts中添加主机名和ip地址解决了这个问题。

我通过在TNSNAMES中将“SID”更改为“SERVICE_NAME”来修复这个问题。ora文件。

请查看您的DB是否要求SID或SERVICE_NAME。

干杯

我刚来的时候也有同样的问题。我刚刚在Windows 8(64位)上安装了Oracle 12c,但我已经在命令行上通过'TNSPING xe'解决了它…如果连接未建立或名称未找到,请尝试数据库名称,在我的情况下,它是'orcl'…再次使用' tnspring orcl',如果它ping成功,那么你需要在这种情况下将SID更改为'orcl'(或任何你使用的数据库名称)…

我也得到了同样的错误,但当他们尝试所有三个失败。 如果以上三点都失败了。尝试LSNRCTL状态,如果您发现服务(在我的情况下是XE)丢失尝试这个

sqlplus /nolog
conn  system
alter system register;  
exit  
lsnrctl status  

现在您可以看到服务 即使没看到也试试这个

sqlplus /nolog  
conn system  
alter system set local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))' scope = both;  
alter system register;  
exit  
lsnrctl status

这应该可以工作…