【Oracle】【FAQ】Oracle 12c使用sqlplus登录SQL界面,出现“ORA-12560: TNS: 协议适配器错误”

本文详细介绍了解决Oracle数据库ORA-12560错误的三种方法:确保监听服务和数据库实例运行正常,通过修改注册表解决可能存在的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个。


1、监听服务未运行


    windows平台个一如下操作:开始---程序---管理工具---服务,打开服务面板(或者直接在我的电脑,右键管理,然后找到服务), 启动OracleOraDB12Home1TNSListener服务。


2、database instance未运行


    windows平台如下操作:开始---程序---管理工具---服务,打开服务面板,启动OracleServiceXXXX,XXXX就是你的database SID.(我这里是OracleServiceORCL


3、注册表存在错误


            在命令行执行regedit打开系统注册表,然后进入

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1将该环境变量ORACLE_SID设置为XXXX,XXXX就是你的database SID.(比如,我这里就是讲ORACLE_SID设置为ORCL)或者右键我的电脑,属性--高级--环境变量---系统变量--新建,变量名=oracle_sid,变量值=XXXX,XXXX就是你的database SID.或者进入sqlplus前,在command line下输set oracle_sid=XXXX,XXXX就是你的database SID.

经过以上步骤,就可以解决问题。


我这里的问题,是直接使用注册表修改解决的:附上截图,



参考资料:http://www.itpub.net/thread-223688-1-1.html

<think>我们正在处理一个Oracle数据库连接错误ORA-12514,该错误表明监听器目前无法识别连接描述符中请求的服务。根据提供的引用信息,我们可以总结出以下几个可能的原因和解决方案: 1. **服务名错误**:在连接字符串中指定的服务名不正确(引用[2]和[5])。 2. **监听器未配置服务**:监听器配置文件(listener.ora)中未正确注册该服务(引用[3])。 3. **动态注册问题**:数据库实例未向监听器动态注册服务(引用[3])。 4. **IP地址配置问题**:listener.oratnsnames.ora中配置的IP地址不正确(引用[4])。 5. **监听器服务未运行**:监听器服务未启动(引用[4])。 下面我们将逐步解决这个问题: ### 步骤1: 确认服务名 首先,我们需要确认数据库实例的实际服务名。可以通过以下SQL查询: ```sql SELECT value FROM v$parameter WHERE name='service_names'; ``` 或者 ```sql SHOW PARAMETER service_names; ``` 另外,也可以查询全局数据库名: ```sql SELECT * FROM global_name; ``` 同时,在数据库服务器上,查看服务名(在Windows服务中,服务名通常是`OracleService`后面的部分,如`OracleServiceXE`中的`XE`)[^5]。 ### 步骤2: 检查监听器状态 登录到数据库服务器,使用`lsnrctl status`命令查看监听器状态,确认监听器是否已经注册了所需的服务。 ```bash lsnrctl status ``` 在输出中查找`Service`部分,检查你的服务名是否被列出。 ### 步骤3: 检查监听器配置文件 检查`listener.ora`文件(通常位于`$ORACLE_HOME/network/admin`目录下),确保监听器配置正确。特别是检查`SID_LIST_LISTENER`部分(如果使用静态注册)以及`LOCAL_LISTENER`参数(如果使用动态注册)。 例如,在引用[3]中,`LOCAL_LISTENER`参数被设置为`LISTENER_DB12`,那么就需要在`listener.ora`中有一个名为`LISTENER_DB12`的监听器配置。 ### 步骤4: 动态注册问题 如果监听器配置为动态注册(默认情况),但监听器状态中没有显示服务,则可能是数据库实例没有成功注册。可以尝试: 1. 确保数据库实例已启动。 2. 在数据库中执行以下命令强制注册: ```sql ALTER SYSTEM REGISTER; ``` 3. 等待几分钟后再次检查监听器状态。 ### 步骤5: 检查连接字符串 确保在连接字符串中使用了正确的服务名。例如,在Navicat中,服务名应该是数据库的实际服务名(如步骤1中查询到的)[^5]。 ### 步骤6: 检查IP地址和主机名配置 确保`listener.ora`和`tnsnames.ora`中配置的IP地址是正确的(本机IP地址,而不是localhost或127.0.0.1,特别是当从远程连接时)[^4]。 ### 步骤7: 重启监听器服务 修改配置文件后,需要重启监听器服务: ```bash lsnrctl stop lsnrctl start ``` 在Windows上,可以在服务管理控制台重启`OracleOraDB12Home1TNSListener`服务[^4]。 ### 步骤8: 检查防火墙 确保数据库监听端口(通常为1521)在防火墙中是开放的。 ### 总结 解决ORA-12514错误的关键在于确保监听器知道所请求的服务。这通常涉及到检查服务名的正确性、监听器的配置以及数据库实例的动态注册情况。按照上述步骤逐一排查,应该能够解决该问题。 §§相关问题§§ 1. 如何查看Oracle数据库的监听器状态? 2. Oracle动态注册和静态注册有什么区别? 3. 在Oracle中,如何修改服务名? 4. 如何配置Oracle监听器以允许远程连接? 5. ORA-12514错误ORA-12541错误(监听器不可用)有何区别?</think>### 解决 Oracle 12c ORA-12514 错误 #### 错误原因分析 ORA-12514 错误表明 Oracle 监听器无法识别连接请求中指定的服务名。主要原因包括: 1. **服务名配置错误**:连接字符串中的服务名与数据库实际服务名不匹配[^5] 2. **监听器未注册服务**:监听器配置(listener.ora)未包含该服务或动态注册失败[^3] 3. **数据库实例未启动**:请求的数据库实例未运行[^4] 4. **IP地址/主机名错误**:listener.ora 中配置了错误的 IP 地址[^4] #### 解决方案步骤 1. **确认实际服务名** 登录数据库服务器执行: ```sql SQL> SHOW PARAMETER service_names; NAME TYPE VALUE ---------------- ----------- ------------------------------ service_names string ORCL -- 此处 ORCL 即实际服务名 ``` 或在 Windows 服务中查找 `OracleServiceXXXX` 的后缀名(如 `OracleServiceORCL` 的服务名为 ORCL)[^5] 2. **检查监听器状态** 在服务器执行: ```bash lsnrctl status ``` 查看输出中是否包含目标服务名(示例): ``` Service "ORCL" has 1 instance(s) -- 必须存在此服务 Instance "orcl", status READY ``` 3. **修正连接配置** 在客户端工具(如 Navicat)中: - 服务名填写步骤 1 查到的实际名称(如 ORCL) - 连接格式:`主机IP:端口/服务名`(示例:`192.168.1.100:1521/ORCL`)[^2][^5] 4. **修改监听器配置**(若无服务注册) 编辑 `$ORACLE_HOME/network/admin/listener.ora`: ```ini SID_LIST_LISTENER = (SID_LIST = (SID_DESC = SID_NAME = ORCL # 与数据库实例名一致 ORACLE_HOME = /u01/app/oracle/product/12.2.0/dbhome_1 GLOBAL_DBNAME = ORCL # 服务名 ) ) ``` 重启监听器: ```bash lsnrctl stop lsnrctl start ``` 5. **检查 IP 绑定** 确保 `listener.ora` 中 `HOST` 为服务器实际 IP(非 localhost): ```ini LISTENER = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) ``` 6. **重启关键服务**(Windows) 在服务管理中重启: - `OracleOraDB12Home1TNSListener` - `OracleServiceORCL`(ORCL 为实例名)[^4] #### 验证连接 使用 SQL*Plus 本地测试: ```bash sqlplus username/password@192.168.1.100:1521/ORCL ``` > **注意**:动态注册的数据库无需静态配置 listener.ora,但需确保实例已通过 `ALTER SYSTEM REGISTER;` 向监听器注册[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值