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

相关推荐
六月雨滴3 小时前
RMAN 增量备份(Incremental Backup)
数据库·oracle
ccice016 小时前
硬核数据技术:驱动Gemini境像站完成从自然语言到SQL查询、数据可视化与洞察报告的全链路自动化(国内镜像免费实测
数据库·oracle
尚雷55809 小时前
Oracle ASM 存储更换与整体迁移实战整理
数据库·oracle·ocr·asm
DarkAthena11 小时前
【DuckDB】一条 SQL 同时连接 Oracle 和 GaussDB
oracle·gaussdb·duckdb
尚雷558012 小时前
Oracle 18C 物理 DataGuard 搭建部署完整文档(适合开发测试)
数据库·oracle·dataguard
倔强的石头10612 小时前
深度解析:数据库内核如何通过逻辑推理与常值推导突破去重性能瓶颈
数据库·oracle
为什么不问问神奇的海螺呢丶13 小时前
Oracle database SYSAUX 表空间占用率过高处理方案
数据库·oracle
在繁华处13 小时前
从零搭建轻灵(五):记忆系统与生产化特性
java·jvm·oracle
betazhou13 小时前
LOG_ARCHIVE_DEST_2 ORA-01033: ORACLE initialization or shut
数据库·oracle·oracle19c adg
这个DBA有点耶1 天前
数据迁移避坑指南:从Oracle到国产数据库的兼容性问题
数据库·数据仓库·sql·oracle·dba