Oracle数据库更换服务器IP后监听不可用是很常见的运维问题,下面我们按照排查到解决的完整流程来逐步操作。

问题原因排查
首先我们需要确认监听不可用的核心原因,大概率是以下两类配置文件中的IP没有同步更新:
listener.ora:服务端监听配置文件,记录了监听绑定的IP和端口tnsnames.ora:客户端或服务端本地服务命名配置文件,记录了连接目标的IP和端口
我们先查看当前服务器的实际IP,假设新IP为192.168.1.100,旧IP为192.168.1.50。
修改listener.ora配置文件
该文件通常位于$ORACLE_HOME/network/admin目录下,首先备份原文件:
# 切换到Oracle用户 su - oracle # 进入配置目录 cd $ORACLE_HOME/network/admin # 备份原监听配置 cp listener.ora listener.ora.bak
打开listener.ora文件,找到类似如下的配置段,将旧的IP替换为新IP:
# 原配置示例
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.50)(PORT = 1521))
)
)
# 修改后配置示例
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
)
)修改tnsnames.ora配置文件
同样在$ORACLE_HOME/network/admin目录下备份并修改该文件:
# 备份原服务命名配置 cp tnsnames.ora tnsnames.ora.bak
找到对应数据库服务的配置段,替换旧IP为新IP:
# 原配置示例
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.50)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
# 修改后配置示例
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)重启监听并验证
修改完配置文件后,需要重启Oracle监听服务使配置生效:
# 停止监听 lsnrctl stop # 启动监听 lsnrctl start # 查看监听状态,确认监听已绑定新IP lsnrctl status
如果监听状态显示正常,我们可以尝试本地连接验证:
# 使用sqlplus连接测试 sqlplus system/password@//192.168.1.100:1521/orcl
如果连接成功,说明监听已经恢复正常,客户端也可以使用新的IP地址连接数据库了。
特殊情况处理
如果修改配置后监听还是无法正常启动,可以检查服务器防火墙是否开放了1521端口:
# 查看防火墙端口开放情况(CentOS7+示例) firewall-cmd --list-ports # 如果1521未开放,添加端口规则 firewall-cmd --add-port=1521/tcp --permanent firewall-cmd --reload
另外如果服务器配置了多个网卡,也可以在listener.ora中添加多个ADDRESS条目,同时监听多个IP地址,避免后续更换IP再次出现同类问题。
Oracle监听配置IP更换listener.oratnsnames.ora修改时间:2026-06-01 20:59:38