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

当前回答

我也有同样的问题,所以为了解决这个问题,我首先使用netca重新配置我的侦听器,之后我删除了我的旧数据库,这是ORCL使用dbca,然后我再次使用dbca创建了新的数据库

其他回答

我的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启动 这些步骤解决了我的问题。

有一些事情会导致这个问题,但是在开始使用JDBC之前,您需要确保可以使用SQL*Plus连接到数据库。如果你不熟悉SQL*Plus,它是一个命令行工具,用于连接Oracle数据库,很长一段时间以来一直是Oracle的标准部分,它包含在Oracle XE中。

使用JDBC连接到Oracle数据库时,不直接连接到数据库。相反,您连接到一个TNS侦听器,然后它将您连接到数据库。ORA-12505错误意味着侦听器已经启动,您可以连接到它,但它不能将您连接到数据库,因为它不知道数据库已经启动。原因有二:

数据库尚未启动, 数据库没有注册到监听器,例如,因为数据库在监听器之前启动。(当数据库启动时,如果它已经在运行,它会向侦听器注册自己。如果监听器没有运行,数据库就不会注册自己,如果监听器启动了,它也不会去寻找可能注册到它的数据库。)

ORA-12505意味着侦听器知道该数据库,但是侦听器还没有收到来自数据库的数据库启动的通知。(如果你试图连接到错误的数据库,使用错误的SID,你会得到一个ORA-12154错误“TNS:无法解析指定的连接标识符”)

服务管理单元中正在运行哪些Oracle服务?(从控制面板>管理工具>服务打开,或只需启动>运行> Services .msc。)您需要运行OracleServiceXE和OracleXETNSListener服务。

如果两个服务都已启动,您是否可以在命令提示符下使用以下任何一种方法连接到SQL*Plus中的数据库?(我假设您正在安装Oracle XE的机器上运行这些程序。)

sqlplus system/system-password@XE
sqlplus system/system-password
sqlplus / as sysdba

(“SYSTEM -password”替换为安装Oracle XE时设置的“SYS”和“SYSTEM”用户密码。)

这三种方法中的第一个通过TNS侦听器连接,但后两个不通过侦听器直接连接到数据库,并且只有当您与数据库在同一台机器上时才能工作。如果第一个失败,但其他两个成功,那么JDBC连接也将失败。如果是,使用其他两个中的一个连接到数据库,并运行ALTER SYSTEM REGISTER。然后退出SQL*Plus并再次尝试第一个表单。

如果第三个失败而第二个成功,则将您的用户帐户添加到ora_dba组中。在控制面板>计算机管理>本地用户和组中执行此操作。

一旦你可以得到连接的形式

sqlplus system/system-password@XE

为了工作,您应该能够通过JDBC连接到Oracle XE。(顺便提一下,您还没有向我们展示用于连接数据库的JDBC代码,但我怀疑它很可能是正确的;如果连接字符串的某些部分出错,就会出现各种其他错误。)

我遇到这个问题是因为我在任务管理器中杀死了任务到“Oracle”任务。 要修复它,你需要打开cmd ->类型:服务。>找到服务“OracleServiceXE”->右键单击:启动。

当你浏览start->run->services.msc时,请检查OracleServiceXE和OracleXETNSListener的状态是否已启动。

对于我的情况下,只有OracleXETNSListener启动,但OracleServiceXE没有启动,当我开始右键单击->启动并检查连接它为我工作

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

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