Oracle监听是Oracle数据库实例和客户端之间的通信桥梁,客户端需要通过监听才能连接到数据库实例,完成数据交互。如果监听没有正确安装配置,即使数据库实例正常运行,外部客户端也无法访问数据库。

Oracle监听安装前的准备
在安装Oracle监听之前,需要确认Oracle数据库软件已经正确安装,并且环境变量已经配置完成。需要检查的环境变量包括ORACLE_HOME和ORACLE_BASE,可以通过以下命令验证:
# 查看ORACLE_HOME环境变量 echo $ORACLE_HOME # 查看ORACLE_BASE环境变量 echo $ORACLE_BASE
如果环境变量没有配置,需要先编辑用户目录下的.bash_profile文件添加对应配置,然后执行source .bash_profile让配置生效。
使用netca工具图形化安装监听
netca是Oracle提供的监听配置图形化工具,适合新手操作,步骤如下:
- 切换到Oracle用户,执行
netca命令启动配置工具 - 在弹出的界面中选择监听程序配置,点击下一步
- 选择添加新的监听程序,点击下一步
- 输入监听程序的名称,默认是LISTENER,也可以自定义名称,点击下一步
- 选择监听使用的协议,默认选择TCP协议即可,点击下一步
- 配置监听的端口号,默认是1521,也可以自定义其他未被占用的端口,点击下一步
- 询问是否配置另一个监听程序,选择否,点击下一步
- 出现配置完成提示后,点击下一步,再点击完成即可
配置完成后,监听的配置文件会保存在$ORACLE_HOME/network/admin目录下,主要文件是listener.ora和tnsnames.ora。
手动编辑文件安装监听
如果没有图形化界面,也可以手动编辑listener.ora文件完成监听安装,步骤如下:
首先进入$ORACLE_HOME/network/admin目录,创建或编辑listener.ora文件,添加以下内容:
# listener.ora配置示例
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 服务器IP地址)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = 数据库实例名)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
)
)
注意将上面的服务器IP地址、数据库实例名、ORACLE_HOME路径替换成实际的环境信息。如果是动态注册监听,也可以不配置SID_LIST_LISTENER部分,数据库实例启动后会自动注册到监听。
监听的常用操作命令
监听安装完成后,需要通过命令来管理监听的状态,常用命令如下:
| 命令 | 作用 |
|---|---|
lsnrctl start | 启动监听程序 |
lsnrctl stop | 停止监听程序 |
lsnrctl status | 查看监听当前状态,包括监听的端口、注册的实例信息 |
lsnrctl reload | 重新加载监听配置,不需要停止监听即可生效配置修改 |
执行lsnrctl status后,如果看到类似Instance "orcl", status READY, has 1 handler(s) for this service...的提示,说明数据库实例已经成功注册到监听,配置生效。
常见安装问题排查
如果监听启动失败或者客户端无法连接,可以从以下几个方面排查:
- 检查
listener.ora文件中的HOST配置是否正确,不要使用localhost,尽量使用服务器实际IP地址 - 检查端口是否被占用,使用
netstat -tuln | grep 1521命令查看端口占用情况,如果被其他程序占用,更换监听端口 - 检查防火墙是否开放了监听对应的端口,如果是云服务器,还需要检查安全组规则是否放行对应端口
- 如果是动态注册监听失败,可以检查数据库实例的
local_listener参数是否配置正确,执行alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=服务器IP)(PORT=1521))'修改参数后重新注册
注意:修改监听配置文件后,建议执行lsnrctl reload命令重新加载配置,避免直接重启监听导致正在连接的客户端中断。