Ubuntu 下 lsnrctl 网络配置技巧
一 基础配置与常用命令
- 以 oracle 用户操作,确保环境变量正确(如 ORACLE_HOME、ORACLE_SID)。常用命令速览:
- 启动/停止/状态:lsnrctl start|stop|status
- 热加载配置:lsnrctl reload
- 查看服务与端点:lsnrctl services
- 在线修改参数:lsnrctl set =;查看参数:lsnrctl get
- 跟踪与日志:lsnrctl trace_level_listener|trace_level_server
- 帮助:lsnrctl help
- 配置文件路径通常为 $ORACLE_HOME/network/admin/listener.ora;必要时同时检查 tnsnames.ora。修改后优先使用 reload 使配置生效,减少中断。
二 监听端口与地址配置
- 修改监听端口(示例改为 1522)
- 编辑配置文件:
sudo -i -u oracle
nano $ORACLE_HOME/network/admin/listener.ora - 在 LISTENER 的 ADDRESS 中将 PORT=1521 改为 PORT=1522。
- 使配置生效:
lsnrctl stop
lsnrctl start
或热加载:lsnrctl reload - 验证:
lsnrctl status
ss -lntp | grep 1522
- 编辑配置文件:
- 仅监听内网地址(示例 192.168.1.100)
- 在 listener.ora 的 ADDRESS 中将 HOST=192.168.1.100(不要用主机名以避免解析不确定性)。
- 重启或热加载监听器,并用 ss -lntp | grep 1521 确认仅绑定到指定地址。
- 防火墙放行
- UFW:sudo ufw allow 1521,1522/tcp
- firewalld:sudo firewall-cmd –add-port=1521/tcp –permanent && sudo firewall-cmd –reload
- 客户端连通性测试
- tnsping 或 sqlplus:sqlplus sys/密码@//192.168.1.100:1521/ORCL as sysdba
- 变更端口会影响现有应用,务必提前通知并更新客户端/中间件配置,且确认新端口未被占用。
三 服务注册与客户端解析
- 静态注册(推荐在需要显式声明 SID 的场景)
- 在 listener.ora 的 SID_LIST_LISTENER 中声明数据库 SID 与 ORACLE_HOME,示例:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = ORCL)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
)
)
- 在 listener.ora 的 SID_LIST_LISTENER 中声明数据库 SID 与 ORACLE_HOME,示例:
- 动态注册(更常见)
- 确保数据库参数 LOCAL_LISTENER 指向当前监听地址,例如:
ALTER SYSTEM SET LOCAL_LISTENER=‘(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.100)(PORT=1521))’ SCOPE=BOTH;
ALTER SYSTEM REGISTER;
- 确保数据库参数 LOCAL_LISTENER 指向当前监听地址,例如:
- 客户端解析
- 在 tnsnames.ora 中定义服务别名,示例:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCL)
)
)
- 在 tnsnames.ora 中定义服务别名,示例:
- 验证
- 查看监听端注册的服务:lsnrctl services
- 从客户端测试:tnsping ORCL 或 sqlplus user/pass@ORCL。
四 systemd 托管与开机自启
-
创建服务单元文件 /etc/systemd/system/oracle-listener.service:
[Unit]
Description=Oracle Listener
After=network.target[Service]
Type=forking
ExecStart=$ORACLE_HOME/bin/lsnrctl start
ExecStop=$ORACLE_HOME/bin/lsnrctl stop
ExecReload=$ORACLE_HOME/bin/lsnrctl reload
User=oracle
Group=oinstall
Restart=on-failure[Install]
WantedBy=multi-user.target -
启用与操作
- 重载并启动:sudo systemctl daemon-reload && sudo systemctl enable –now oracle-listener
- 查看状态:sudo systemctl status oracle-listener
-
使用 systemd 可确保监听器随系统启动、统一日志与故障重启。
五 故障排查要点
- 端口与进程
- 检查监听端口:ss -lntp | grep 1521 或 netstat -an | grep 1521
- 若端口被占用,换端口或释放占用进程后再启动监听器。
- 监听状态与服务注册
- lsnrctl status 查看监听地址、端口与已注册服务;lsnrctl services 核对 SID/SERVICE_NAME 是否出现。
- 客户端连通
- 先用 tnsping 验证解析与连通,再用 sqlplus 测试登录;必要时在客户端 tnsnames.ora 中使用 IP 而非主机名以规避 DNS 问题。
- 防火墙与云安全组
- 确认 UFW/firewalld 与云厂商安全组已放行对应 TCP 端口。
- 日志与跟踪
- 提高日志与跟踪级别定位疑难:lsnrctl trace_level_listener 16、lsnrctl trace_level_server 16,检查 $ORACLE_HOME/diag/tnslsnr/ 下日志。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1455980.html