You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Hibernate 5.2.12连接Oracle 11g遇“Logon denied”错误求助

解决Hibernate连接Oracle 11g时的"Logon denied"异常

我之前也碰到过这种糟心的情况——明明用户名密码都对,Hibernate就是连不上Oracle报登录拒绝。别慌,咱们一步步来排查,大概率是某个细节没注意到:

1. 先确认Oracle用户的状态与权限

Oracle用户很容易被锁定,比如默认新建用户可能处于锁定状态,或者多次输错密码触发了自动锁定。你可以用sys用户登录Oracle执行以下SQL检查:

SELECT username, account_status FROM dba_users WHERE username = '你的用户名';

如果查询结果里account_status是LOCKED(TIMED)或者LOCKED,那先解锁并重置密码(哪怕你觉得密码正确,重置一下更保险):

ALTER USER 你的用户名 ACCOUNT UNLOCK;
ALTER USER 你的用户名 IDENTIFIED BY 你的密码;

2. 核对JDBC URL的格式与正确性

Oracle 11g的JDBC URL有两种常见格式,别搞混了:

  • 薄驱动(推荐):jdbc:oracle:thin:@//<主机名>:<端口>/<服务名>
  • 旧SID格式:jdbc:oracle:thin:@<主机名>:<端口>:<SID>
    你可以通过lsnrctl status命令查看Oracle监听里的服务信息,确认是用服务名还是SID,然后对应调整hibernate.connection.url。另外注意端口默认是1521,别写错主机名或者端口号。

3. 检查Hibernate配置文件的细节

  • 先确认hibernate.connection.username和hibernate.connection.password有没有多余的空格!我之前就栽过这个坑,复制粘贴的时候不小心带了空格,看起来没问题但就是连不上。比如这种错误:
    <!-- 错误示例:密码末尾有空格 -->
    <property name="hibernate.connection.password">mySecurePassword </property>
    
  • 驱动类要设置正确:Oracle 11g对应的驱动类是oracle.jdbc.OracleDriver,确保hibernate.connection.driver_class配置没错。
  • 方言设置:Hibernate 5.2.x没有专门的Oracle 11g方言,用org.hibernate.dialect.Oracle10gDialect就完全兼容。

4. 用纯JDBC测试排除Hibernate的问题

写个极简的JDBC测试类,绕过Hibernate直接连Oracle,看看是不是Hibernate的配置问题:

import java.sql.Connection;
import java.sql.DriverManager;

public class OracleJdbcTest {
    public static void main(String[] args) {
        String jdbcUrl = "jdbc:oracle:thin:@//localhost:1521/orcl"; // 换成你的URL
        String dbUser = "你的用户名";
        String dbPass = "你的密码";
        
        try {
            Class.forName("oracle.jdbc.OracleDriver");
            Connection conn = DriverManager.getConnection(jdbcUrl, dbUser, dbPass);
            System.out.println("JDBC连接成功!说明问题不在Oracle端");
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("JDBC也连不上,那问题出在Oracle配置或网络上");
        }
    }
}

如果JDBC能连上,那再回头检查Hibernate的配置;如果JDBC也失败,就专注排查Oracle本身的问题。

5. 确认Oracle监听服务是否正常

  • Windows上:打开服务列表,找到OracleOraDb11g_home1TNSListener,确认它是启动状态。
  • Linux上:执行lsnrctl status查看监听状态,如果没启动就用lsnrctl start启动。
    监听没启动的话,肯定连不上数据库,会出现登录拒绝或者连接超时。

6. 检查防火墙设置

如果Oracle数据库在远程服务器上,本地或者服务器的防火墙可能挡住了1521端口。可以临时关闭防火墙测试一下,或者在防火墙上添加1521端口的放行规则。

按照这个顺序排查,应该能快速定位到问题所在。

内容的提问来源于stack exchange,提问作者Ambar Dudhane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:34:34