TNS-12545: Connect failed because target host or object does not exist
TNS-12545 错误是 Oracle 数据库连接中非常常见的网络错误,核心含义是客户端无法找到指定的目标主机或数据库服务对象,简单来说就是 “连不上目标地址 / 服务”
1、基础连通性排查
# 1. 测试主机是否可达(替换为你的数据库服务器IP/主机名)
ping 192.168.1.100
# 2. 测试Oracle监听端口是否开放(默认1521,替换为实际端口)
telnet 192.168.1.100 1521
# 或更现代的方式(Linux/macOS)
nc -zv 192.168.1.100 1521
2、检查 TNS 配置文件(tnsnames.ora)
路径通常为:
Windows: %ORACLE_HOME%\network\admin\tnsnames.ora Linux/macOS: $ORACLE_HOME/network/admin/tnsnames.ora
常见出错点:
HOST 字段填错:比如用了错误的 IP、主机名(或主机名无法解析)
PORT 字段错误:不是数据库监听的实际端口(默认 1521,可能被修改)
SERVICE_NAME 错误:需和数据库端一致,可在数据库服务器执行以下命令确认:
-- 在数据库服务器上以sysdba身份执行
SELECT name, value FROM v$parameter WHERE name IN ('service_names', 'instance_name');
ORCL = # 服务名(客户端连接时用的名称)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) # 核心:IP/主机名+端口
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl) # 必须和数据库实际的SERVICE_NAME一致(不是SID)
)
)
3、检查数据库监听状态(Listener)
# 在数据库服务器执行:
# 1. 查看监听状态
lsnrctl status
# 2. 如果监听未启动,启动监听
lsnrctl start
# 3. 查看监听配置(listener.ora)
# 路径:$ORACLE_HOME/network/admin/listener.ora
4、临时测试:跳过 TNS 配置直接连接
如果想快速定位问题,可绕过 tnsnames.ora,直接用 EZCONNECT 方式连接(Oracle 10g + 支持):
如果这个命令能连接成功:说明问题出在 tnsnames.ora 配置。 如果仍失败:说明网络 / 监听 / 数据库服务名存在问题。
# 格式:sqlplus 用户名/密码@主机IP:端口/SERVICE_NAME
sqlplus scott/tiger@192.168.1.100:1521/orcl
Categories:
数据库运维