oracle安装目录在D盘,电脑重装系统之后,plsql只能连服务器上数据库,连不了本地数据库,连接会报错: ORA-12514
步骤 1:确认 Oracle 核心服务已启动
重装系统后,Oracle 的服务可能未自动注册或启动,需手动检查:
- 按下 Win+R,输入
services.msc打开服务列表。 - 找到以下 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一致
)
)
检查要点:
- SERVICE_NAME 必须与 listener.ora 中的 GLOBAL_DBNAME 完全一致。
- HOST 和 PORT 需与监听配置一致(127.0.0.1:1521)。
我的修改点:步骤二中 listener.ora 文件修改配置
- HOST = localhost改为
HOST = 127.0.0.1 - 加上
GLOBAL_DBNAME = ORCL这一配置
步骤 4:重启监听服务使配置生效
修改 listener.ora 或 tnsnames.ora 后,需重启监听服务:
- 按下 Win+R,输入 cmd 打开命令行。
- 执行命令重启监听:
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 一致。