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

相关推荐
jnrjian3 天前
ORA-01017 查找机器名 用户名 以及library cache lock 参数含义
数据库·oracle
TTc_3 天前
oracle中的union和union all有什么区别?
数据库·oracle
山峰哥3 天前
吃透 SQL 优化:告别慢查询,解锁数据库高性能
服务器·数据库·sql·oracle·性能优化·编辑器
南 阳3 天前
Python从入门到精通day37
数据库·python·oracle
轩情吖3 天前
MySQL库的操作
android·数据库·mysql·oracle·字符集·数据库操作·编码集
脱发的老袁3 天前
【数据库】Oracle手动清理归档日志
数据库·oracle
jnrjian3 天前
Oracle 共享池 库缓存下的 Library Cache Lock
数据库·缓存·oracle
新缸中之脑4 天前
在Reddit上探索未满足的需求
数据库·oracle
light blue bird4 天前
产线多并发客户端指令操作场景组件
jvm·oracle·.net·winform
坐吃山猪4 天前
Neo4j04_数据库事务
数据库·oracle·neo4j