在Oracle数据库的日常管理和维护工作中,知晓其监听端口号是一项基础且至关重要的技能,无论是配置新的客户端连接、设置防火墙规则,还是进行网络故障排查,都离不开这个关键信息,Oracle数据库通过一个名为“TNS监听器”的独立进程来监听和处理来自客户端的连接请求,而这个进程正是在一个特定的TCP/IP端口上提供服务,本文将系统性地介绍多种查询Oracle数据库端口号的方法,以适应不同的操作环境和权限级别。
查看监听器配置文件 listener.ora
这是最直接、最权威的方法。listener.ora
文件是Oracle监听器的核心配置文件,其中明确定义了监听器的名称、协议、主机地址以及它所监听的端口号。
文件位置:
该文件通常位于Oracle软件安装目录的network/admin
子目录下,具体路径可以通过环境变量$ORACLE_HOME
来确定,
- Linux/Unix:
$ORACLE_HOME/network/admin/listener.ora
- Windows:
%ORACLE_HOME%networkadminlistener.ora
示例:**
打开listener.ora
文件,你会看到类似以下的配置块:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = orcl) (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1) (SID_NAME = orcl) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = db-server-01)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
在上述示例中,LISTENER
部分下的ADDRESS
条目清晰地指出了监听器使用的协议是TCP
,主机是db-server-01
,而端口号就是1521,如果数据库管理员修改了默认端口,那么在这里就能看到实际的端口号。
使用 lsnrctl
命令行工具
lsnrctl
(Listener Control)是Oracle提供的用于管理监听器的命令行工具,通过它,我们可以获取监听器的实时状态信息,包括其正在监听的端口。
操作步骤:
- 登录到数据库服务器,打开终端(或命令提示符)。
- 切换到Oracle用户(如果需要)。
- 执行以下命令:
lsnrctl status
命令输出示例:
执行命令后,你会看到一份详细的状态报告,关键信息位于“Listening Endpoints Summary…”部分:
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 20-OCT-2025 10:30:00
Copyright (c) 1991, 2025, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db-server-01)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date 20-OCT-2025 09:00:15
Uptime 0 days 1 hr. 29 min. 45 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/db-server-01/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db-server-01)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "orcl" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
从输出中可以明确看到,监听器正在HOST=db-server-01
的PORT=1521
上监听TCP协议的连接,此方法的优势在于它反映了监听器当前的实际运行状态,而不仅仅是静态配置。
在数据库内部查询数据字典视图
如果你拥有数据库的DBA权限,但没有服务器操作系统的登录权限,可以通过查询特定的数据字典视图来获取端口信息,这种方法尤其适用于云数据库或由第三方运维的数据库环境。
查询 V$SESSION_CONNECT_INFO
视图:
这个视图包含了当前会话的详细连接信息,通过查询当前会话,可以找到其连接所使用的端口。
SELECT sid, service_name, network_service_banner FROM v$session_connect_info WHERE sid = SYS_CONTEXT('USERENV', 'SID');
在network_service_banner
字段的返回值中,通常会包含类似TCP ... ... port=1521 ...
的字符串,从中即可解析出端口号。
有时,数据库参数local_listener
会指定监听器的地址,但这个参数通常指向一个在服务器端tnsnames.ora
文件中定义的TNS别名,而不是直接显示端口号。
SELECT name, value FROM v$parameter WHERE name = 'local_listener';
如果VALUE
列返回一个别名(如LISTENER_ORCL
),你仍然需要查看服务器上的tnsnames.ora
文件来解析这个别名,才能找到最终的端口号。V$SESSION_CONNECT_INFO
通常是更直接的选择。
利用操作系统工具进行验证
无论使用哪种方法,最终都可以通过操作系统自带的网络工具来验证端口是否确实处于监听状态。
在Linux/Unix上使用 netstat
或 ss
:
# 使用 netstat 查找监听1521端口的进程 netstat -anp | grep 1521 # 或者使用 ss 命令(更现代、更快速) ss -lntp | grep 1521
在Windows上使用 netstat
:
netstat -ano | findstr 1521
这些命令会列出所有处于LISTEN
状态的端口及其对应的进程ID(PID),如果Oracle监听器正在运行,你就能看到它正在监听你查询到的端口号,这是确认端口可用性的最终手段。
方法小编总结
为了方便你快速选择,下表对上述方法进行了小编总结:
方法 | 命令/文件 | 适用场景 | 优点 |
---|---|---|---|
listener.ora | $ORACLE_HOME/network/admin/listener.ora | 服务器直接访问 | 最权威的静态配置信息 |
lsnrctl status | lsnrctl status | 服务器命令行访问 | 获取实时、动态的监听状态 |
V$视图查询 | SELECT ... FROM v$session_connect_info | 仅拥有数据库DBA权限 | 无需服务器OS权限,从内部获取信息 |
OS工具验证 | netstat , ss | 任何有OS权限的用户 | 验证端口是否真正处于监听状态 |
相关问答FAQs
解答: 这种情况下,可以通过查找监听器进程来定位其配置文件,使用ps
命令找到监听器进程tnslsnr
的进程ID(PID):ps -ef | grep tnslsnr
找到PID后,使用lsof
(List Open Files)命令查看该进程打开了哪些文件,其中就包含了配置文件:lsof -p <PID> | grep listener.ora
通过这种方式,即使不清楚Oracle的安装结构,也能精确找到listener.ora
文件的位置。
问题2:Oracle数据库的默认端口一定是1521吗?可以修改吗?
解答: 不一定,1521是Oracle数据库公认的默认端口号,在安装过程中如果不做特殊指定,监听器通常会配置在这个端口上,出于安全考虑(避免被默认扫描工具轻易发现)或避免端口冲突,强烈建议在生产环境中将其修改为其他自定义端口,修改端口只需编辑listener.ora
文件中的PORT
值,然后使用lsnrctl reload
或lsnrctl stop/start
命令使配置生效即可,一个数据库实例也可以配置多个监听器,分别监听不同的端口。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复