处理Listener refused the connection with the follewing error:0RA-12514, TiS:listener does not currentl

我所遇见的情况是数据库没有启动导致的,所以请先确保你的数据库是否未启动的状态。

sqlplus / as sysdba

select instance_name, status from v$instance;

如果返回的结果中 status 列显示为 OPENMOUNTED,则表示数据库实例正在运行。

 

1.检查tnsnames.ora文件

XXX =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = XXX.XXX.XXX.XXX)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = XXXX)
    )
  )

2.检查listener.ora文件

3.重启监听器

lsnrctl stop

lsnrctl start

4.验证监听器状态

lsnrctl status

5.检查防火墙设置

### ORA-12514 错误的根本原因 ORA-12514 错误表示 TNS 监听器无法识别连接描述符中请求的服务名称。这一问题的主要原因是服务名(SERVICE_NAME)在监听器配置文件 `listener.ora` 和数据库初始化参数文件中不一致,或者监听器尚未注册该服务[^2]。 --- ### 解决方案详解 #### 一、检查监听器配置文件 `listener.ora` 确保 `listener.ora` 文件中定义的监听器和服务名称与实际需求相符。例如: ```plaintext LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name_or_ip)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = your_service_name) (ORACLE_HOME = /path/to/oracle/home) (SID_NAME = your_sid_name) ) ) ``` 其中: - `your_host_name_or_ip` 替换为服务器的实际主机名或 IP 地址。 - `your_service_name` 应与数据库的 SERVICE_NAME 参数保持一致。 - `your_sid_name` 是数据库实例的 SID 名称。 更新完成后,重启监听器以使更改生效: ```bash lsnrctl stop lsnrctl start ``` --- #### 二、验证数据库是否已向监听器注册 通过以下命令检查监听器状态以及其已知的服务列表: ```bash lsnrctl status ``` 输出应显示类似于以下的内容: ```plaintext Services Summary... Service "your_service_name" has 1 instance(s). Instance "your_instance_name", status READY, has 1 handler(s) for this service... The command completed successfully ``` 如果没有看到预期的服务名称,则需要进一步排查。 --- #### 三、检查数据库初始化参数 登录到数据库并查看 `LOCAL_LISTENER` 参数设置是否正确: ```sql show parameter LOCAL_LISTENER; ``` 如果返回为空或指向错误的监听器地址,则可以通过以下方式动态修改参数: ```sql ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=your_host_name_or_ip)(PORT=1521))' SCOPE=BOTH; ``` 随后手动触发重新注册: ```sql ALTER SYSTEM REGISTER; ``` --- #### 四、检查 tnsnames.ora 配置 确保客户端使用的 `tnsnames.ora` 文件中定义的服务名称与监听器和数据库的一致。例如: ```plaintext YOUR_SERVICE_NAME = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name_or_ip)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = your_service_name) ) ) ``` --- #### 五、测试连接 使用 `tnsping` 命令测试网络服务名是否可以成功解析: ```bash tnsping YOUR_SERVICE_NAME ``` 如果解析成功,再尝试通过 SQL*Plus 连接数据库: ```bash sqlplus username/password@YOUR_SERVICE_NAME ``` --- ### 总结 ORA-12514 错误的核心在于服务名称未被监听器正确认识。解决方案包括但不限于校验 `listener.ora` 和 `tnsnames.ora` 配置文件、调整数据库初始化参数 `LOCAL_LISTENER` 并强制重新注册服务[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值