Oracle登录数据库服务器配置的核心答案是:本地登录直接使用SQLPlus输入用户名密码即可;远程登录则必须确保监听器(Listener)正常运行,并在客户端配置tnsnames.ora文件指向正确的IP、端口和服务名。 接下来我从实战角度拆解整个配置流程,先解决”怎么连”的问题,再解决”连不上”的麻烦。
本地登录与远程登录的区别
很多朋友刚接触Oracle时,最困惑的就是”登录数据库服务器”到底指什么,摆在你面前的有两种情况:
- 本地登录:在安装了Oracle数据库的服务器本机上操作,不需要网络配置,直接打开命令行窗口输入
sqlplus命令就能连。 - 远程登录:从你的个人电脑连接另一台服务器上的Oracle数据库,这时候配置就复杂了,涉及监听器、防火墙、客户端网络配置三个环节。
本地登录是最简单的入门方式,在服务器上打开终端,切换为Oracle安装用户(通常是oracle用户),执行:
sqlplus / as sysdba
这行命令表示以操作系统认证方式登录SYS账户,不需要密码,如果你想登录普通业务账户,比如scott或你自己创建的用户:
sqlplus username/password
如果数据库服务器和客户端在同一台机器,这种方式永远畅通,但现实中更多场景是你坐在工位上,去连一台网络另一端的数据库服务器。
Oracle远程连接数据库的配置方法
远程登录的核心在于客户端如何找到服务器,Oracle官方提供了一套标准流程,业内统一称为”客户端-服务器网络架构”,按下面的步骤操作,90%的情况都能一次打通。
第一步:确认服务器端监听器已启动
监听器是Oracle数据库对外服务的”门卫”,它负责接收客户端的连接请求,在数据库服务器上执行:
lsnrctl status
这条命令会返回监听器的运行状态,如果显示The command completed successfully且列出了服务名,说明监听器正常,如果显示TNS-12541: TNS:no listener,那就要先启动监听器:
lsnrctl start
启动后再次执行lsnrctl status确认,这里要提醒一句,监听器的启动用户必须是Oracle安装用户,不能是root,否则会因权限问题启动失败。
第二步:获取数据库服务名
监听器只是门卫,它还需要知道该把你引导到哪个数据库,查看服务名的方式很简单,使用SYS账户登录数据库后执行:
show parameter service_names;
查出来的结果类似orcl.example.com,其中orcl就是数据库实例名,example.com是域名部分。客户端连接时的SERVICE_NAME通常填实例名即可,但如果数据库配置了多域名,必须完整填写。
第三步:配置客户端tnsnames.ora文件
这是整个配置过程中最核心的文件,位于你的个人电脑上,Windows系统一般在$ORACLE_HOME\network\admin\tnsnames.ora,Linux/Mac同理,用记事本或文本编辑器打开(没有就新建),追加以下内容:
MYDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
详细拆解一下各字段含义:
MYDB:连接别名,随意命名,方便你记忆。HOST:数据库服务器的IP地址,必须修改成你自己的服务器IP。PORT:Oracle默认端口是1521,除非DBA调整过监听端口,否则不要改动。SERVICE_NAME:数据库服务名,就是第二步查出来的结果。
第四步:用SQLPlus测试远程连接
配置好tnsnames.ora后,在客户端命令行执行:
sqlplus username/password@MYDB
如果弹出了SQL>提示符,说明配置成功,如果报错,大概率是下面这些原因:
ORA-12170: TNS:Connect timeout occurred:网络不通或防火墙拦截,排查服务器防火墙是否放行1521端口。ORA-12541: TNS:no listener:监听器没启动,回到第一步。ORA-12514: TNS:listener does not currently know of service requested:服务名错误,检查SERVICE_NAME是否写对。
图形化工具连接的额外配置
如果你用的是PL/SQL Developer或Navicat这类图形化工具,登录方式有差异,PL/SQL Developer需要本地装有Oracle客户端,选择”登录”时填写Username和Password,Database项直接填IP:PORT/SERVICE_NAME格式,比如168.1.100:1521/orcl,不需要额外写tnsnames.ora文件。
行业共识认为,PL/SQL Developer是DBA最常用的图形化工具,它的连接稳定性优于Navicat的直连模式,尤其在处理复杂PL/SQL块调试时优势明显。
服务器端监听器配置详解
很多刚入门的开发者会跳过监听器配置这个环节,直接改tnsnames.ora,结果客户端始终连不上,理解监听器的配置文件listener.ora(位于服务器端$ORACLE_HOME\network\admin目录),才能从根源上解决问题。
默认配置与手动配置的差异
Oracle安装完成后会自动生成一个默认的listener.ora,大多数情况下够用,典型内容如下:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
问题就出在HOST = localhost这项。如果客户端从远程连接,服务器端的监听地址不能是localhost,必须改为服务器的真实IP地址,否则监听器只会监听回环地址,外部网络完全无法触达,修改为:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
)
)
修改后重启监听器生效:
lsnrctl stop lsnrctl start
多数据库实例的监听注册机制
服务器上同时运行多个Oracle实例(比如一个生产库一个测试库),监听器如何区分?这就涉及动态注册和静态注册两种机制。
动态注册是最常见的方式,数据库实例启动时,PMON后台进程自动把实例信息(服务名、实例名)注册到监听器,只要db_recovery_file_dest_size等参数配置正常,动态注册会自动完成,无需手动干预,查看注册结果:
lsnrctl services
静态注册则需要在listener.ora中手动指定,适用于数据库未启动但想要监听器提前就绪的场景,在listener.ora末尾追加:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/19.3.0/dbhome_1)
(SID_NAME = orcl)
)
)
ORACLE_HOME路径必须填写正确,否则监听器启动时会报错,这里有个通用经验:生产环境多数采用动态注册,因为减少了配置文件出错的可能;测试环境为了快速启动示例,偶尔会配置静态注册。
oracle数据库无法连接怎么排查
无论配置多么仔细,连接失败总是难免的,用下面这套排查顺序,绝大多数问题都能定位。
| 排查步骤 | 执行命令或操作 | 针对问题 |
|---|---|---|
| 第1步 | 客户端ping服务器IP | 网络是否通畅,ICMP协议是否被禁 |
| 第2步 | 服务器执行lsnrctl status |
监听器是否运行,服务名是否注册 |
| 第3步 | 服务器执行telnet 127.0.0.1 1521 |
本机端口是否监听 |
| 第4步 | 客户端执行telnet 服务器IP 1521 |
防火墙是否放行,端口是否可达 |
| 第5步 | 客户端执行tnsping MYDB |
tnsnames.ora配置是否正确 |
tnsping是Oracle自带的小工具,特别适合验证tnsnames.ora文件是否配置准确,执行后如果显示类似OK (0 msec),说明配置正确,问题出在数据库端;如果报TNS-03505: Failed to resolve name,那就要检查tnsnames.ora的路径和语法了。
防火墙问题是最隐蔽的坑,很多服务器同时启用iptables和firewalld,Oracle安装时忘了放行1521端口,导致企业内部网络依然不通,在服务器上执行:
firewall-cmd --permanent --add-port=1521/tcp firewall-cmd --reload
另外云服务器(简米云、酷番云等)还需要在安全组规则中放行1521端口,这一点经常被遗忘。
Q&A:oracle怎么登录到数据库服务器的常见疑问
Oracle的sys密码忘了,还能不能登录数据库服务器?
可以,Oracle提供操作系统认证方式,只要你的操作系统用户属于dba组(比如oradba),就能绕过密码直接登录,使用SYS账户,在数据库服务器本机执行sqlplus / as sysdba,登录后通过alter user sys identified by 新密码;命令重置密码,前提是你有服务器主机的操作系统账户权限。
使用PL/SQL Developer连接时报”ORA-12154: TNS:could not resolve the connect identifier”,怎么处理?
这个错误表示客户端解析不了你填写的连接标识符,处理方法按优先级排列:先确认tnsnames.ora文件是否存在且格式正确,路径是否指向了$ORACLE_HOME\network\admin目录;再检查环境变量TNS_ADMIN是否被设置到了其他目录;最后确认你在连接时填写的数据库名是否与tnsnames.ora中的别名完全一致(区分大小写)。
数据库服务器变更了IP地址,监听器需要重新配置吗?
需要重新配置,但不必修改listener.ora,Oracle从11g开始支持动态注册,监听器默认监听localhost,这在IP变更后会造成远程连接中断,更稳妥的做法是将listener.ora中的HOST修改为新IP地址,同时检查数据库中LOCAL_LISTENER参数是否指向了旧地址,修改后重启监听器,再在客户端更新tnsnames.ora中的HOST字段即可完成整个迁移。
Oracle登录配置本质上遵循一个原则:服务器端管好监听器,客户端管好tnsnames.ora,两端配置的SERVICE_NAME必须完全一致,理清了这条链路,不管遇到什么登录问题,都能顺着排查路径找到根因。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/788765.html


