前提条件
ORACLE_HOME指向Oracle安装目录、ORACLE_SID指定数据库实例名)。lsnrctl通常包含在Oracle Instant Client中,需先安装对应版本的Instant Client(以19.8为例):
sudo apt update;wget https://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-basic-linux.x64-19.8.0.0.0dbru.zipwget https://download.oracle.com/otn_software/linux/instantclient/19800/instantclient-sqlplus-linux.x64-19.8.0.0.0dbru.zip;/opt/oracle):sudo mkdir -p /opt/oraclesudo unzip instantclient-basic-linux.x64-19.8.0.0.0dbru.zip -d /opt/oraclesudo unzip instantclient-sqlplus-linux.x64-19.8.0.0.0dbru.zip -d /opt/oracle;~/.bashrc):export ORACLE_HOME=/opt/oracle/instantclient_19_8
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME:$PATH
source ~/.bashrc。在$ORACLE_HOME/network/admin目录下创建listener.ora(若目录不存在则手动创建),配置监听器地址和端口:
sudo mkdir -p $ORACLE_HOME/network/admin
sudo nano $ORACLE_HOME/network/admin/listener.ora
示例内容(替换your_host_name为实际主机名):
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name)(PORT = 1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = your_sid) # 替换为实际数据库SID
(ORACLE_HOME = $ORACLE_HOME)
)
)
```。
### **3. 创建tnsnames.ora文件(可选但推荐)**
用于定义数据库服务名,方便客户端连接,在`$ORACLE_HOME/network/admin`目录下创建:
```bash
sudo nano $ORACLE_HOME/network/admin/tnsnames.ora
示例内容(替换your_service_name和your_host_name):
YOUR_SERVICE_NAME =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_host_name)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = your_service_name)
)
)
```。
### **4. 创建systemd服务脚本(推荐方式)**
为方便管理监听器服务,创建systemd单元文件:
```bash
sudo nano /etc/systemd/system/oracle-listener.service
示例内容(替换oracle为Oracle用户、oinstall为用户组):
[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
```。
### **5. 加载并启动监听器服务**
- 重新加载systemd配置:`sudo systemctl daemon-reload`;
- 启动监听器服务:`sudo systemctl start oracle-listener`;
- 设置开机自启:`sudo systemctl enable oracle-listener`;
- 检查服务状态(确认运行正常):`sudo systemctl status oracle-listener`。
### **6. 验证lsnrctl功能**
直接运行命令查看监听器状态(应显示“RUNNING”状态):
```bash
lsnrctl status
若状态正常,说明lsnrctl已成功安装并运行。
oracle)对$ORACLE_HOME/network/admin目录及配置文件有读写权限(可通过chown和chmod调整);/etc/init.d/oracle-lsnrctl),需额外创建并设置权限(参考旧版Ubuntu的SysVinit方式);HOST需与服务器实际IP或域名一致,避免客户端连接失败。