在 Debian 上(通常是安装了 Oracle Database 或 Oracle Client 后才会有 lsnrctl),lsnrctl 本身不能直接“添加监听”,它是用来**管理监听器(listener)**的,真正“加监听”需要修改 listener.ora 配置文件,然后用 lsnrctl 启动/重载。
下面按常见场景说明。
which lsnrctl
通常路径类似:
/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
需要 oracle 用户执行:
su - oracle
一般在:
$ORACLE_HOME/network/admin/listener.ora
编辑 listener.ora:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
)
)
LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1522))
)
)
SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = orcl)
)
)
HOST可用 IP 或主机名
PORT不能冲突
lsnrctl start LISTENER2
查看状态:
lsnrctl status LISTENER2
如果你只是改了已有监听:
lsnrctl reload
Oracle 不自带 systemd 服务,可手动建:
/etc/systemd/system/oracle-listener.service
[Unit]
Description=Oracle Listener
After=network.target
[Service]
Type=forking
User=oracle
Environment=ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
ExecStart=/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl start
ExecStop=/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl stop
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable oracle-listener
tnsnames.ora 和防火墙如果你能告诉我:
我可以给你完全对应的配置示例。