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

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


造成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

ORA-12514 错误通常表示 Oracle 客户端尝试连接数据库时,监听器无法识别请求的服务名或 SID。在 Oracle 12c 中,由于引入了多租户架构(CDB/PDB),服务名的配置和连接方式与传统数据库有所不同,因此需要特别注意配置细节。 ### 问题原因分析 - **监听器未正确配置服务名**:监听器的 `listener.ora` 文件中未定义 PDB 对应的 `SID_LIST` 或 `GLOBAL_DBNAME`。 - **服务名未在数据库中注册**:PDB 的服务名未在数据库中注册,导致监听器无法动态注册该服务。 - **连接字符串配置错误**:客户端的 `tnsnames.ora` 中配置的服务名与数据库服务名不一致。 - **监听器未启动或未重新加载配置**:监听器服务未启动或未加载更新后的配置文件。 ### 解决方法 #### 1. 修改 `listener.ora` 文件 确保监听器配置文件中包含 CDB 和 PDB 的服务注册信息。以 Oracle 12c 为例,修改 `/network/admin/listener.ora` 文件,添加如下内容: ```ini SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) # CDB 服务名 (ORACLE_HOME = /u01/app/oracle/product/12.2.0/dbhome_1) (SID_NAME = orcl) ) (SID_DESC = (GLOBAL_DBNAME = pdborcl) # PDB 服务名 (ORACLE_HOME = /u01/app/oracle/product/12.2.0/dbhome_1) (SID_NAME = pdborcl) ) ) ``` 保存文件后,重启监听器服务以应用更改: ```bash lsnrctl stop lsnrctl start ``` #### 2. 检查数据库服务注册状态 连接到数据库并查询当前注册的服务名: ```sql SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL> select name, pdb from v$services; NAME PDB -------------------------------- -------------------- orcl CDB$ROOT pdborcl PDBORCL ``` 确保 `pdborcl` 服务名已注册。如果没有注册,可以手动注册: ```sql SQL> alter system set service_names='pdborcl' scope=both; ``` #### 3. 配置客户端 `tnsnames.ora` 在客户端的 `tnsnames.ora` 文件中添加 PDB 的连接描述符: ```ini PDBORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdborcl) ) ) ``` #### 4. 使用 SQL*Plus 验证连接 尝试使用 `tnsping` 和 `sqlplus` 测试连接: ```bash tnsping pdborcl sqlplus username/password@pdborcl ``` #### 5. 检查监听器状态 使用以下命令查看监听器是否识别 PDB 服务: ```bash lsnrctl status ``` 在输出中应看到 `Service "pdborcl" has 1 instance(s)`。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值