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 一致。

相关推荐
一个有温度的技术博主17 小时前
DeepSeek Harness 深度解析:与 LangChain / LangGraph 的本质区别
数据库·oracle·langchain·harness
隔窗听雨眠19 小时前
Oracle误Truncate操作恢复:从原理到实战的完整指南
数据库·oracle
无己心21 小时前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
xfhuangfu1 天前
Oracle中建立到CDB和PDB的连接
数据库·oracle·rpc
浪子明X1 天前
从 MongoDB 文档到关系模型:构建可重跑、可对账的数据迁移流水线
数据库·mongodb·oracle
隔窗听雨眠1 天前
GBase 8s并发控制深度解析:封锁机制、隔离级别与死锁处理全攻略
服务器·数据库·oracle
阿坤带你走近大数据2 天前
SQL的执行顺序和书写顺序的介绍
数据库·sql·oracle
浅念-2 天前
MySQL CRUD | 增删改查知识点总结
数据库·sql·mysql·oracle
码农颜2 天前
5.6.2 ⾏级锁死锁
数据库·sql·oracle
ChaHae-In2 天前
MyBatis动态SQL与MyBatis-Plus高效开发指南
数据库·oracle·mybatis