我已经在我的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

当前回答

@Luke Woodward的回答帮助我确定我的XE没有连接。 我在连接VPN时遇到了一个问题。我使用的是Windows 11上的最新本地Oracle 21c。 文件监听器。Ora和tnsnames。我们使用我的电脑名称“ERIK-PC”是这样的:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ERIK-PC)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

我只需要将ERIK-PC更改为localhost。 更多信息在这个帖子里。 顺便说一下,我使用的是Oracle 21c,从18c开始,*。ora文件在installationfolder\homes\OraDB21Home1\network\admin\*.ora下 保存您的更改并使用特权的windows shell重新启动侦听器:

lsnrctl stop
lsnrctl start

其他回答

当我试图使用SQL开发器连接到oracle DB时,我得到了这个错误ORA-12505, TNS:侦听器目前不知道连接描述符中给定的SID。

使用的JDBC字符串是JDBC:oracle:thin:@myserver:1521/XE,显然是正确的,两个强制的oracle服务OracleServiceXE, OracleXETNSListener已经启动并运行。

我解决这个问题的方法(在Windows 10中)

 1. Open run command.
 2. Type services.msc 
 3. Find services with name OracleServiceXE and OracleXETNSListener in the list.
 4. Restart OracleServiceXE service first. After completing the restart try restarting OracleXETNSListener service.

我的甲骨文停止工作,我得到这个错误。我重启了我的机器,也尝试了上述解决方案。最终,我打开了组件服务并重新启动了oracle服务,一切都开始工作了。希望这能帮助到一些人。

@Luke Woodward的回答帮助我确定我的XE没有连接。 我在连接VPN时遇到了一个问题。我使用的是Windows 11上的最新本地Oracle 21c。 文件监听器。Ora和tnsnames。我们使用我的电脑名称“ERIK-PC”是这样的:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ERIK-PC)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

我只需要将ERIK-PC更改为localhost。 更多信息在这个帖子里。 顺便说一下,我使用的是Oracle 21c,从18c开始,*。ora文件在installationfolder\homes\OraDB21Home1\network\admin\*.ora下 保存您的更改并使用特权的windows shell重新启动侦听器:

lsnrctl stop
lsnrctl start

我的oracle DB服务器IP最近发生了变化,我在/etc/hosts文件中硬编码了值:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.210.61 myoracledb.mycompanydomain.com myoracledb

必须将192.168.210.61 IP更改为新的IP, lsnrctl停止,然后lsnrctl启动 这些步骤解决了我的问题。

当我使用以下代码时,我的问题得到了解决:

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@IPAddress:1521/servicename","userName","Password");