ORA-12505,TNS:侦听器目前不知道连接描述符中给出的SID?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (65)

我在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
提问于
用户回答回答于

有几件事可能会导致此问题,但在开始使用JDBC之前,需要确保可以使用SQL * Plus连接到数据库。如果您不熟悉SQL * Plus,那么它就是一个用于连接Oracle数据库的命令行工具,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系统/ 系统密码 @XE
sqlplus系统/ 系统密码
sqlplus / as sysdba

(用system-password安装Oracle XE期间为SYS和SYSTEM用户设置的密码替换。)

这三个中的第一个通过TNS侦听器连接,但第二个不通过侦听器直接连接到数据库,只在与数据库位于同一台计算机上时才起作用。如果第一个失败但其他两个成功,则JDBC连接也将失败。如果是这样,请使用其他两个连接到数据库并运行ALTER SYSTEM REGISTER。然后退出SQL * Plus并再次尝试第一个表单。

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

一旦你可以获得表单的连接

sqlplus系统/ 系统密码 @XE

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

用户回答回答于

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

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

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

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

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

(注:之间1521XE应该是/

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

扫码关注云+社区