ORA-12505解决办法

当使用Oracle服务时遇到ORA-12505错误时,通过修改listener.ora文件并重启服务即可解决。

第一次用的时候一点问题都没有,后来把oracleservice和listening两个服务停掉之后再用就出现:

ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

 

 

解决办法是修改D:\app\Administrator\product\11.1.0\db_1\NETWORK\ADMIN下的listener.ora

改成:

 

# listener.ora Network Configuration File: d:\app\Administrator\product\11.1.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = D:\app\Administrator\product\11.1.0\db_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = D:\app\Administrator\product\11.1.0\db_1)
      (SID_NAME = orcl)
    )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

 

重启oracleservice和listening两个服务即可。

ORA - 12505 错误表示监听器不知道连接描述符中指定的 SID。以下是一些解决办法: ### 检查监听器配置 - **确认监听器状态**:使用 `lsnrctl status` 命令来检查监听器的状态,确保监听器正在运行。如果监听器没有运行,可以使用 `lsnrctl start` 命令启动它。 ```bash lsnrctl status lsnrctl start ``` - **检查监听器配置文件**:监听器配置文件通常位于 `$ORACLE_HOME/network/admin/listener.ora`。确认该文件中是否正确配置了要连接的数据库实例的 SID。示例配置如下: ```plaintext SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = ORCL) (ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521)) ) ) ``` 修改配置文件后,需要重新加载监听器配置,使用 `lsnrctl reload` 命令: ```bash lsnrctl reload ``` ### 检查 TNSNAMES.ORA 配置 - **确认 TNSNAMES.ORA 文件**:该文件通常位于 `$ORACLE_HOME/network/admin/tnsnames.ora`。确保其中的连接描述符正确配置了要连接的数据库实例的 SID。示例配置如下: ```plaintext ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = ORCL) ) ) ``` - **测试 TNS 连接**:使用 `tnsping` 命令测试 TNS 连接是否正常。例如: ```bash tnsping ORCL ``` ### 检查数据库实例注册 - **确认数据库实例是否注册到监听器**:在数据库实例中执行以下 SQL 语句,检查实例是否已注册到监听器: ```sql SELECT * FROM V$REGISTRY; ``` 如果实例没有注册,可以尝试手动注册,在 SQL*Plus 中执行以下命令: ```sql ALTER SYSTEM REGISTER; ``` ### 检查 JDBC 连接 URL - **确认 JDBC 连接 URL**:确保在 Java 代码中使用的 JDBC 连接 URL 正确指定了要连接的数据库实例的 SID。示例代码如下: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class JdbcExample { public static void main(String[] args) { String url = "jdbc:oracle:thin:@your_host:1521:ORCL"; String user = "your_user"; String password = "your_password"; try { Connection conn = DriverManager.getConnection(url, user, password); System.out.println("Connected to the database!"); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } ``` ### 尝试重启系统 有用户通过重启虚拟机上的系统解决了该问题,猜测可能是上次关机时系统未正常退出[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值