PLSQL 连接本地 Oracle 数据库报 ORA-12514

oracle安装目录在D盘,电脑重装系统之后,plsql只能连服务器上数据库,连不了本地数据库,连接会报错: ORA-12514

步骤 1:确认 Oracle 核心服务已启动

重装系统后,Oracle 的服务可能未自动注册或启动,需手动检查:

  1. 按下 Win+R,输入 services.msc 打开服务列表。
  2. 找到以下 2 个核心服务,确保状态为 "已启动":
    • OracleServiceXXX(XXX 为数据库实例名,如 OracleServiceORCL):数据库实例服务,必须启动。
    • OracleOraDB12Home1TNSListener(名称可能因版本略有差异):监听服务,必须启动。
    • 若未启动,右键 "启动";若启动失败,记录错误信息(可能是配置文件损坏)。

我的是OracleServiceOrcl未启动,改成手动启动`

步骤 2:检查监听配置文件(listener.ora)

监听程序通过 listener.ora 识别数据库服务,文件路径:ORACLE_HOME\network\admin(如 D:\app\你的用户名\product\12.2.0\dbhome_1\network\admin)。

正确配置示例(需根据实际环境修改路径和实例名):

bash 复制代码
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))  # 监听本地1521端口
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

# 关键:注册数据库实例到监听
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)  # 数据库服务名(需与实际一致)
      (SID_NAME = ORCL)      # 实例名(需与OracleServiceXXX的XXX一致)
      (ORACLE_HOME = D:\app\你的用户名\product\12.2.0\dbhome_1)  # 你的Oracle安装路径
    )
  )

检查要点:

  • HOST 需为 localhost 或 127.0.0.1(本地连接)。
  • SID_LIST_LISTENER 中必须包含你的数据库实例信息(GLOBAL_DBNAME 和 SID_NAME 需正确,通常默认实例名为 ORCL)。
    ORACLE_HOME 路径需与实际安装路径一致(重装系统后若路径变化,需同步修改)。

步骤 3:检查客户端连接配置(tnsnames.ora)

PLSQL 通过 tnsnames.ora 识别连接描述符,与 listener.ora 在同一目录。

正确配置示例(需与监听配置匹配):

bash 复制代码
ORCL =  # 连接名(PLSQL中选择的名称)
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))  # 与监听的HOST/PORT一致
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCL)  # 必须与listener.ora中的GLOBAL_DBNAME一致
    )
  )

检查要点:

  1. SERVICE_NAME 必须与 listener.ora 中的 GLOBAL_DBNAME 完全一致。
  2. HOST 和 PORT 需与监听配置一致(127.0.0.1:1521)。

我的修改点:步骤二中 listener.ora 文件修改配置

  • HOST = localhost改为 HOST = 127.0.0.1
  • 加上GLOBAL_DBNAME = ORCL这一配置

步骤 4:重启监听服务使配置生效

修改 listener.ora 或 tnsnames.ora 后,需重启监听服务:

  1. 按下 Win+R,输入 cmd 打开命令行。
  2. 执行命令重启监听:
bash 复制代码
lsnrctl stop   # 停止监听
lsnrctl start  # 启动监听
lsnrctl status # 查看监听状态(确认"服务摘要"中包含你的实例,如ORCL)

若启动成功,状态中会显示 服务 "ORCL" 包含1个实例。

步骤 5:验证数据库服务名是否正确

若以上配置正确仍报错,需确认数据库实际服务名:

通过 sqlplus 登录数据库(若能登录):

命令行输入 sqlplus / as sysdba(本地管理员登录,无需监听)。

执行以下 SQL 查询实际服务名:

bash 复制代码
select value from v$parameter where name = 'service_names';

结果需与 listener.ora 的 GLOBAL_DBNAME 和 tnsnames.ora 的 SERVICE_NAME 一致。

相关推荐
放下华子我只抽RuiKe51 小时前
FastAPI 全栈后端(三):数据库与 ORM
前端·数据库·react.js·oracle·性能优化·前端框架·fastapi
开开心心就好3 小时前
解决截图被拦截黑屏问题的免费小工具
安全·智能手机·flink·kafka·pdf·音视频·1024程序员节
oyyanghh3 小时前
从Cursor到TRAE的三周vibe coding体验对比
数据库·oracle
Bert.Cai3 小时前
Oracle CONCAT函数详解
数据库·oracle
tiancaijiben5 小时前
阿里云云备份(Cloud Backup)全量对接与使用指南
数据库·oracle
李白的天不白5 小时前
数据库的CEUD
数据库·sql·oracle
山峰哥6 小时前
从全表扫描到覆盖索引:我是怎么干掉慢查询的
数据库·sql·oracle·性能优化·编辑器·深度优先
睡不醒男孩03082320 小时前
自建 Prometheus+Grafana 与 CLUP 深度监控 PG 集群有什么区别?
数据库·oracle
德迅云安全-小潘1 天前
网站遭遇SQL注入攻击?应急处置、漏洞修复与长效防御完整方案
网络·sql·oracle
swordbob1 天前
MySQL和Oracle关于读未提交的区别
数据库·mysql·oracle