lsnrctl是Oracle数据库的监听器控制工具,并非Ubuntu系统自带组件,需先安装Oracle数据库软件才能使用。以下是在Ubuntu上安装并配置lsnrctl的详细步骤:
sudo apt update && sudo apt upgrade -y,确保系统包列表及已安装软件为最新版本。sudo apt install -y build-essential libaio1 libgcc1 libstdc++6 libncurses5-dev libssl-dev unixodbc unixodbc-dev安装。lsnrctl属于Oracle数据库的一部分,需通过安装Oracle数据库软件获取。以Oracle 19c为例,步骤如下:
oracle-database-ee-19c-1.0-1.x86_64.rpm)。alien工具转换RPM包:sudo apt install -y alien
sudo alien -d oracle-database-ee-19c-1.0-1.x86_64.rpm
sudo dpkg -i oracle-database-ee-19c-1.0-1.x86_64.deb
sudo /etc/init.d/oracle-xe-19c configure,按提示设置数据库SID、密码、监听端口(默认1521)等信息。为确保lsnrctl能正常运行,需配置Oracle相关环境变量。编辑~/.bashrc(或~/.profile)文件,添加以下内容:
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1 # 替换为实际ORACLE_HOME路径
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export ORACLE_SID=orcl # 替换为实际数据库SID
保存后执行source ~/.bashrc使变量生效。
监听器配置文件位于$ORACLE_HOME/network/admin/listener.ora,需根据网络环境修改:
sudo nano $ORACLE_HOME/network/admin/listener.ora
示例配置(按需调整HOST、PORT、SID_NAME):
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) # 主机名或IP地址
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl) # 数据库SID
(ORACLE_HOME = /u01/app/oracle/product/19c/dbhome_1) # ORACLE_HOME路径
)
)
保存退出。
若需从客户端通过服务名连接数据库,需配置tnsnames.ora文件(位于$ORACLE_HOME/network/admin/):
sudo nano $ORACLE_HOME/network/admin/tnsnames.ora
示例配置(替换为实际HOST、PORT、SERVICE_NAME):
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl) # 数据库服务名
)
)
保存退出。
su - oracle切换。lsnrctl start
lsnrctl status
若显示“Listener is ready”则表示启动成功。lsnrctl stop
lsnrctl restart
为方便管理,可将监听器配置为systemd服务:
sudo nano /etc/systemd/system/oracle-listener.service
oracle为用户、oinstall为组,$ORACLE_HOME为实际路径):[Unit]
Description=Oracle Listener Service
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 oracle-listener
sudo systemctl start oracle-listener
sudo systemctl status oracle-listener
$ORACLE_HOME、$ORACLE_HOME/network/admin等目录有读写权限。sudo ufw allow 1521/tcp开放端口。$ORACLE_HOME/diag/tnslsnr/<hostname>/listener/alert/log.xml定位问题。