返回

Java连接Oracle数据库时ORA-12505错误的解决方法

java

解决 Java 中的 "java.sql.SQLException: Listener refused the connection with the following error: ORA-12505"

简介

"java.sql.SQLException: Listener refused the connection with the following error: ORA-12505" 错误是一个常见的错误,在使用 Java 连接 Oracle 数据库时可能会遇到。这个错误表示 Oracle 侦听器无法识别用于连接的 SID(系统标识符)。

解决方案

1. 检查 SID

首先,确保 JDBC URL 中指定的 SID 正确无误。可以通过在 Oracle 数据库中运行以下查询来验证 SID:

SELECT * FROM V$INSTANCE;

检查 "NAME" 列以获取实例名称。SID 是实例名称的大写形式。

2. 确保侦听器正在运行

接下来,检查 Oracle 侦听器是否正在运行。在 Windows 上,使用以下命令:

lsnrctl status

在 Linux/Unix 上,使用以下命令:

ps -ef | grep tnslsnr

如果侦听器未运行,请使用以下命令启动它:

  • Windows:lsnrctl start
  • Linux/Unix:sudo /etc/init.d/oracle-xe start

3. 更新 tnsnames.ora 文件

如果侦听器正在运行,但仍收到该错误,则可能需要更新 tnsnames.ora 文件。该文件位于以下位置:

  • Windows:<Oracle Home>\network\admin
  • Linux/Unix:<Oracle Base>\network\admin

在 tnsnames.ora 文件中,找到指向所需 SID 的条目。确保条目包含以下信息:

  • 实例名称
  • 主机名
  • 端口号
  • 服务名称

4. 更新 JDBC URL

更新 tnsnames.ora 文件后,需要更新 JDBC URL 以指向正确的 tns 名称:

jdbc:oracle:thin:@<tns_name>

其中 <tns_name> 是 tnsnames.ora 文件中定义的 tns 名称。

5. 重新启动应用程序

完成所有更改后,重新启动应用程序以使更改生效。

其他提示

  • 确保数据库服务器和客户端计算机可以相互访问。
  • 如果上述步骤不起作用,请尝试重新安装 Oracle 客户端和服务器软件。
  • 如果仍然遇到问题,请参阅 Oracle 文档或向 Oracle 支持寻求帮助。

常见问题解答

1. 如何获取 SID?

在 Oracle 数据库中运行以下查询:SELECT * FROM V$INSTANCE; 检查 "NAME" 列以获取实例名称。SID 是实例名称的大写形式。

2. 如何启动 Oracle 侦听器?

  • Windows:lsnrctl start
  • Linux/Unix:sudo /etc/init.d/oracle-xe start

3. tnsnames.ora 文件在哪里?

  • Windows:<Oracle Home>\network\admin
  • Linux/Unix:<Oracle Base>\network\admin

4. 如何更新 JDBC URL?

jdbc:oracle:thin:@<tns_name>

其中 <tns_name> 是 tnsnames.ora 文件中定义的 tns 名称。

5. 如果重新启动应用程序后问题仍然存在,该怎么办?

请尝试重新安装 Oracle 客户端和服务器软件。如果您仍然遇到问题,请参阅 Oracle 文档或向 Oracle 支持寻求帮助。