首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ORA-12505 数据库连接失败:SID 配置排查全指南

     編輯:程式設計綜合問答

异常信息解读

org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection
Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was: localhost:1521:XE

核心错误 ORA-12505 表明:监听器识别不到连接描述符中指定的 SID (XE)。

排查清单

  1. 验证数据库实例状态
    # Linux/Unix
    lsnrctl status
    # Windows 服务面板检查 OracleServiceXE、OracleXETNSListener 服务是否运行
    
  2. 确认 SID 名称
    • 查看 $ORACLE_HOME/network/admin/tnsnames.ora 配置
    • 或登录数据库查询:SELECT instance_name FROM v$instance;
  3. 检查监听器配置
    # listener.ora 关键配置
    SID_LIST_LISTENER =
      (SID_LIST =
        (SID_DESC =
          (SID_NAME = XE)  # 必须与连接串一致
          (ORACLE_HOME = /path/to/oracle)
        )
      )
    
  4. 验证连接参数
    • 主机:localhost 或实际 IP
    • 端口:默认 1521,确认监听器监听端口
    • SID/Service Name:区分 SID 与 Service Name,JDBC URL 格式不同:
      • SID 模式:jdbc:oracle:thin:@host:port:SID
      • Service Name 模式:jdbc:oracle:thin:@host:port/ServiceName

Spring/Hibernate 配置修正示例

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" /> <!-- 确认 SID -->
    <property name="username" value="your_user" />
    <property name="password" value="your_pass" />
</bean>

快速验证命令

# 测试网络连通性
tnsping XE

# SQL*Plus 直连测试
sqlplus user/pass@//localhost:1521/XE

常见误区

  • 混淆 SID 与 Service Name(Oracle 12c+ 推荐使用 Service Name)
  • 防火墙拦截 1521 端口
  • 多实例环境下监听器未注册目标实例
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved