Java连接Oracle数据库时ORA-12505错误的解决方法
2024-03-01 11:49:19
解决 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 支持寻求帮助。