本地连接Oracle数据库服务器名称,本质上就是在数据库客户端工具里正确填写主机地址、端口和服务名这三个要素,其中服务名(或SID)就是你要找的“服务器名称”,它定义在服务端tnsnames.ora文件中。
很多初学者第一次接触Oracle时,在“服务器名称”这一栏卡住,不知道该填IP地址还是填什么长串字符,其实这个名称是可以自定义的,是DBA在数据库服务器上配置好的一个“别名”,本文从原理到实操,一步步带你搞懂本地怎么连接Oracle数据库服务器名称。
本地连接Oracle数据库服务器名称前,先分清三个概念
在动手填任何配置之前,先花三分钟搞懂三个容易混淆的词,否则你会越试越糊涂。
服务名(Service Name)与SID的区别
- 服务名:对应Oracle 8i之后引入的概念,格式通常类似
orcl或orcl.example.com,是数据库对外提供服务的逻辑标识。 - SID:早期版本使用,指数据库实例的系统标识符,连接时同样写在主机字符串里。
行业共识认为,如今90%以上企业的Oracle数据库都使用服务名配置,因为服务名支持RAC集群和Data Guard等高级特性,你在“服务器名称”栏里填的,绝大多数情况下就是服务名。
服务器名称不等于IP地址
本地怎么连接Oracle数据库服务器名称,最容易踩的坑就是把“服务器名称”当成了IP地址。
| 项目 | 填写的值 | 示例 |
|---|---|---|
| 主机名/IP | 数据库服务器所在机器的网络地址 | 168.1.100 |
| 端口 | 监听器打开的端口 | 1521 |
| 服务器名称/服务名 | tnsnames.ora里定义的别名 | ORCL |
如果你只填了IP地址和端口,但“服务名”一栏留空或填错,连接会直接报ORA-12514: TNS listener does not currently know of service错误。
本地连接Oracle数据库服务器名称配置实操:从零到连通
下面用两台电脑的实际场景演示一台装了Oracle数据库的Windows服务器(假设IP为168.1.100),一台本地Windows电脑装了SQLPlus或Navicat客户端。
第一步:在数据库服务器上确认服务名
登录数据库服务器,打开命令行,输入:
lsnrctl status
这个命令会显示监听器的详细信息,重点看最后一列“Service”后面跟的名字,
Service "ORCL" has 1 instance(s).
这里的ORCL就是你要用的服务器名称,如果这步查询不到服务名,说明监听服务未启动,需要先运行:
lsnrctl start
第二步:检查客户端tnsnames.ora文件位置
本地电脑需要知道去哪找这个配置文件,常见路径如下:
- Windows:
$ORACLE_HOME\network\admin\tnsnames.ora - Linux:
$ORACLE_HOME/network/admin/tnsnames.ora - 免安装客户端(如Instant Client):
你的解压目录\network\admin\
用记事本打开tnsnames.ora,内容类似:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
这里ORCL连接标识符”,SERVICE_NAME = ORCL是最终生效的服务名。如果你没装Oracle客户端,只有Navicat这类第三方工具,可以跳过tnsnames.ora的修改,直接在图形界面里填。
第三步:SQLPlus连接实战
在本地打开命令提示符,输入以下命令:
sqlplus system/密码@192.168.1.100:1521/ORCL
这段命令的拆解含义:
system:数据库用户名密码:对应用户的密码168.1.100:1521:主机和端口ORCL:服务名
看到Connected to Oracle Database字样即为连接成功,如果报ORA-12154错误,大概率是tnsnames.ora文件格式或位置有问题。
第四步:Navicat图形化连接路径
Navicat连接Oracle时,“服务器名称”这个概念被拆成了两个字段,在连接配置界面依次填写:
- 主机:
168.1.100 - 端口:
1521 - 服务名:选择“服务名”单选按钮,输入
ORCL
如果选择“SID”单选按钮,则改为输入ORCL对应的SID值,这个值在服务器上执行select instance_name from v$instance;可以查到。
本地连接Oracle数据库服务器名称失败,按这个次序排查
连接不上时,不要乱猜,按照从外到内的顺序逐层排查。
先确认网络能否到达
在命令行执行:
ping 192.168.1.100
telnet 192.168.1.100 1521
- ping不通:网络不通或防火墙拦截。
- ping通但telnet端口不通:数据库服务器防火墙未放行1521端口,Windows服务器在“高级安全Windows Defender防火墙”中添加入站规则;Linux服务器用
firewall-cmd --add-port=1521/tcp。
再确认监听是否工作
在数据库服务器本机运行:
lsnrctl status
如果监听状态是The listener supports no services,说明监听没有关联到数据库实例,常见原因是listener.ora文件配置有误,或者数据库实例未注册,此时需要检查listener.ora中是否存在类似:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = D:\app\oracle\product\19.0.0\dbhome_1)
(SID_NAME = ORCL)
)
)
最后排查服务名是否有效
在本地SQLPlus中执行:
sqlplus system/密码@192.168.1.100:1521/ORCL
报ORA-12514表示服务名写错,解决办法是在服务器上执行:
lsnrctl services
这个命令展示当前监听器实际注册的服务名,对着这个输出结果逐字符核对大小写和拼写。
本地连接Oracle数据库服务器名称常见问题速查
服务器名称填SID还是服务名?
如果你的数据库是单实例且非RAC环境,两者填哪个都能连通,但填服务名是长远更稳妥的做法,在连接字符串中,SID用SID关键字,服务名用SERVICE_NAME关键字:
sqlplus user/pwd@host:port/SID
sqlplus user/pwd@host:port/SERVICE_NAME
为什么用ODBC连接时服务器名称那里默认显示空?
ODBC数据源管理器里,Oracle ODBC Driver配置界面的“Service Name”字段,就是本文说的服务名,它默认为空,需要手动输入,拉黑下拉列表里出现的名称,其实来自你本机tnsnames.ora中定义的连接标识符,如果你的tnsnames.ora文件没配置,这个下拉列表就是空的。
你在本机连接时最常见的两个坑
坑一:Oracle临时改了端口导致名称失效
不少公司出于安全考虑,把1521端口改成了1522或1526,你手里拿到的“服务器名称”其实是对的,但连接配置里端口没改成实际值,这很像你拿着老地址去找朋友搬家后的新家名字还是那个名字,但门牌号变了,本地怎么连接Oracle数据库服务器名称不只是填对名字,还得确认IP和端口和服务名是同一套配置里的信息。
坑二:32位客户端连接64位数据库
本地装了32位Oracle客户端,去连64位的远程数据库服务(或反过来),经常报ORA-12560,这不是服务名和用户名密码的问题,而是客户端与服务器架构不匹配,解决办法:统一客户端位数与服务器位数,或使用纯JDBC连接方式规避。
Q&A:本地连接Oracle数据库服务器名称的补充问题
如何查到远程Oracle服务名?
SQLPlus中以sysdba身份登录数据库,执行show parameter service_names;可以查看当前实例的服务名,也可执行lsnrctl services查看监听器注册的所有服务名,这两个命令是查证“服务器名称”最权威的方式。
本地没装Oracle客户端,也能连Oracle数据库吗?
能,Navicat、DBeaver等图形化工具内置了连接Oracle所需的OCI驱动,无需单独安装Oracle客户端,在连接配置界面直接填写主机、端口和服务名即可,如果你需要命令行方式,可以使用Oracle Instant Client精简版,下载解压后配置PATH环境变量就能用SQLPlus连接。
连接时提示用户名或密码无效,但密码明明没错,怎么办?
先排除服务器名称填错的可能,因为Oracle的认证服务在密码验证前也依赖监听器正确路由到目标实例,确认服务名无误后,再检查是否密码区分大小写,从Oracle 11g开始默认启用密码大小写敏感,如果数据库设置了SEC_CASE_SENSITIVE_LOGON=TRUE,密码大小写写错就会认证失败,条件允许时DBA可以通过alter user 用户名 identified by 新密码;重置密码来验证。
连接Oracle这件事,搞懂了服务名的来龙去脉就等于成功了一半,剩下的一半在于配置文件的路径和监听器的状态,把上面说的几个命令在服务器和本地各跑一遍,绝大多数连接问题都能自己解决,本地怎么连接Oracle数据库服务器名称,归纳起来就三句话:查服务名,找对配置文件位置,填准监听信息。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/790944.html


