如何迅速恢复CentOS Lsnrctl监听配置以避免服务中断?

更新于
2026-09-29 18:43:58
6阅读来源:SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

Oracle 的监听器一旦失效。数据库连接会立即被中断,业务程序会出现大面积的“掉线”现象。是在 CentOS 上,由于 SELinux 或防火墙默认开启。往往会不经意间把监听器的端口挡住。下面给大家梳理一套快速恢复 CentOS 下 lsnrctl 配置、避免服务中断的完整流程。

了解 lsnrctl 的关键性与常见痛点

lsnrctl 是 Oracle 用来管理监听器的命令行工具。它可以启动、停止、重载还有查询监听状态。但如果你不小心修改了 listener.ora 或 tnsnames.ora,却没有及时重启监听器,或者忘记了更改后的新 SID 未正确添加到 SID_LIST。就会出现以下痛点:

如何迅速恢复CentOS Lsnrctl监听配置以避免服务中断?
  • 服务突然不可用: 客户端报 “ORA‑12541:listener does not currently exist” 或 “ORA‑12514:listener does not currently know of service”。
  • 修改后无效: 使用 ls​nrctl 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 测试是否为策略问题:

如何迅速恢复CentOS Lsnrctl监听配置以避免服务中断?
# 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。就会出现以下痛点:

如何迅速恢复CentOS Lsnrctl监听配置以避免服务中断?
  • 服务突然不可用: 客户端报 “ORA‑12541:listener does not currently exist” 或 “ORA‑12514:listener does not currently know of service”。
  • 修改后无效: 使用 ls​nrctl 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 测试是否为策略问题:

如何迅速恢复CentOS Lsnrctl监听配置以避免服务中断?
# 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 配置是否包含需要访问的服务名与主机信息,否则客户端将找不到目标数据库。