如何迅速恢复CentOS Lsnrctl监听配置以避免服务中断?
- 内容介绍
- 文章标签
- 相关推荐
Oracle 的监听器一旦失效。数据库连接会立即被中断,业务程序会出现大面积的“掉线”现象。是在 CentOS 上,由于 SELinux 或防火墙默认开启。往往会不经意间把监听器的端口挡住。下面给大家梳理一套快速恢复 CentOS 下 lsnrctl 配置、避免服务中断的完整流程。
了解 lsnrctl 的关键性与常见痛点
lsnrctl 是 Oracle 用来管理监听器的命令行工具。它可以启动、停止、重载还有查询监听状态。但如果你不小心修改了 listener.ora 或 tnsnames.ora,却没有及时重启监听器,或者忘记了更改后的新 SID 未正确添加到 SID_LIST。就会出现以下痛点:
- 服务突然不可用: 客户端报 “ORA‑12541:listener does not currently exist” 或 “ORA‑12514:listener does not currently know of service”。
- 修改后无效: 使用 lsnrctl status 时仍显示旧配置。
- SELinux / 防火墙拦截: 默认策略阻止了 1521/TCP。导致即使 listener 正在跑,也收不到任何请求。
- 缺少备份: 没有准备好 listener.ora 的历史备份,一旦误删就难以还原。
快速恢复步骤
1️⃣ 先备份当前配置
$ cp $ORACLE_HOME/network/admin/listener.ora $ORACLE_HOME/network/admin/listener.ora.bak
$ cp $ORACLE_HOME/network/admin/tnsnames.ora $ORACLE_HOME/network/admin/tnsnames.ora.bak
2️⃣ 恢复或编辑配置文件
a) 有备份时直接恢复:
$ mv $ORACLE_HOME/network/admin/listener.ora.bak $ORACLE_HOME/network/admin/listener.ora
b) 无备份时手动修复: 编辑 /$ORACLE_HOME/network/admin/listener.ora
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = ) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = ) ) GENERIC_SERVICES=YES
3️⃣ 重启监听器并验证状态
$ lsnrctl stop
$ lsnrctl start
$ lsnrctl status
If output shows “Service Summary … OK”,则说明已恢复正常。如果仍然报错,请检查上一步是否漏掉了必要的参数。
4️⃣ 验证客户端连通性
$ sqlplus / as sysdba
SQL> select * from v$instance;
若能正常查询,说明 Listener 已经能够接受连接。
SELinux 与防火墙配置技巧
A.临时禁用 SELinux 测试是否为策略问题:
# setenforce 0 # lsnrctl restart # lsnrctl status # 如果现在正常,则是 SELinux 阻塞 # setenforce 1 # 恢复强制模式 # semanage port -a -t oracle_listener_port_t -p tcp 1521 # 给端口加标签 # restorecon -R -v /etc/opt/oracle/* # 重置权限上下文 # systemctl restart auditd # 可选:重启审计守护进程。让策略生效
B.永久开放防火墙端口:
# firewall-cmd --permanent --zone=public --add-port=1521/tcp # firewall-cmd --reload # firewall-cmd --list-ports | grep 1521 # 确认已开放
常用命令速查表
| 命令功能 | 示例与备注 |
|---|---|
| $ lsnrctl status | 查看当前 Listener 状态与已注册服务;排查是否已加载最新配置, |
| $ lsnrctl stop | 优雅停止 Listener;在做大改前一定要先停, |
| $ lsnrctl start | 启动 Listener;若配文件未变更,可直接重启以应用修改。 |
| $ lsnrctl reload | 仅重新加载配文件,无需完全关闭;适合小范围调整后即时生效。 |
| $ grep LISTENER /etc/hosts | |
| $ netstat -plnt | grep :1521 | listener",否则可能是其他程序冲突。 |
| $ selinuxenabled | 判断 SELinux 是否开启。如果返回 yes,则后续需做策略调整。 |
| $ systemctl status firewalld.service | 查看 firewalld 是否在运行,如未启动需手动开启或切换为 iptables。 |
| $ cat $ORACLEHOME/network/admin/tnsnames. ora .txt | 确认 tnsnames 配置是否包含需要访问的服务名与主机信息,否则客户端将找不到目标数据库。 |
Oracle 的监听器一旦失效。数据库连接会立即被中断,业务程序会出现大面积的“掉线”现象。是在 CentOS 上,由于 SELinux 或防火墙默认开启。往往会不经意间把监听器的端口挡住。下面给大家梳理一套快速恢复 CentOS 下 lsnrctl 配置、避免服务中断的完整流程。
了解 lsnrctl 的关键性与常见痛点
lsnrctl 是 Oracle 用来管理监听器的命令行工具。它可以启动、停止、重载还有查询监听状态。但如果你不小心修改了 listener.ora 或 tnsnames.ora,却没有及时重启监听器,或者忘记了更改后的新 SID 未正确添加到 SID_LIST。就会出现以下痛点:

-
服务突然不可用: 客户端报 “ORA‑12541:listener does not currently exist” 或 “ORA‑12514:listener does not currently know of service”。
-
修改后无效: 使用 lsnrctl status 时仍显示旧配置。
-
SELinux / 防火墙拦截: 默认策略阻止了 1521/TCP。导致即使 listener 正在跑,也收不到任何请求。
-
缺少备份: 没有准备好 listener.ora 的历史备份,一旦误删就难以还原。
快速恢复步骤
1️⃣ 先备份当前配置
$ cp $ORACLE_HOME/network/admin/listener.ora $ORACLE_HOME/network/admin/listener.ora.bak
$ cp $ORACLE_HOME/network/admin/tnsnames.ora $ORACLE_HOME/network/admin/tnsnames.ora.bak
2️⃣ 恢复或编辑配置文件
a) 有备份时直接恢复:
$ mv $ORACLE_HOME/network/admin/listener.ora.bak $ORACLE_HOME/network/admin/listener.ora
b) 无备份时手动修复:
编辑 /$ORACLE_HOME/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
)
)
GENERIC_SERVICES=YES
3️⃣ 重启监听器并验证状态
$ lsnrctl stop
$ lsnrctl start
$ lsnrctl status
If output shows “Service Summary …
OK”,则说明已恢复正常。如果仍然报错,请检查上一步是否漏掉了必要的参数。
4️⃣ 验证客户端连通性
$ sqlplus / as sysdba
SQL> select * from v$instance;
若能正常查询,说明 Listener 已经能够接受连接。
SELinux 与防火墙配置技巧
A.临时禁用 SELinux 测试是否为策略问题:

# setenforce 0
# lsnrctl restart
# lsnrctl status # 如果现在正常,则是 SELinux 阻塞
# setenforce 1 # 恢复强制模式
# semanage port -a -t oracle_listener_port_t -p tcp 1521 # 给端口加标签
# restorecon -R -v /etc/opt/oracle/* # 重置权限上下文
# systemctl restart auditd # 可选:重启审计守护进程。让策略生效
B.永久开放防火墙端口:
# firewall-cmd --permanent --zone=public --add-port=1521/tcp
# firewall-cmd --reload
# firewall-cmd --list-ports | grep 1521 # 确认已开放
常用命令速查表
命令功能 示例与备注
$ lsnrctl status
查看当前 Listener 状态与已注册服务;排查是否已加载最新配置,
$ lsnrctl stop
优雅停止 Listener;在做大改前一定要先停,
$ lsnrctl start
启动 Listener;若配文件未变更,可直接重启以应用修改。
$ lsnrctl reload
仅重新加载配文件,无需完全关闭;适合小范围调整后即时生效。
$ grep LISTENER /etc/hosts
$ netstat -plnt | grep :1521
listener",否则可能是其他程序冲突。
$ selinuxenabled
判断 SELinux 是否开启。如果返回 yes,则后续需做策略调整。
$ systemctl status firewalld.service
查看 firewalld 是否在运行,如未启动需手动开启或切换为 iptables。
$ cat $ORACLEHOME/network/admin/tnsnames. ora .txt
确认 tnsnames 配置是否包含需要访问的服务名与主机信息,否则客户端将找不到目标数据库。

