Ubuntu系統使用lsnrctl的常見問題及解決方法
原因:lsnrctl未安裝,或安裝路徑未添加到系統環境變量PATH中。
解決方法:
which lsnrctl
命令查看路徑(若返回空則未安裝);~/.bashrc
文件,添加export PATH=$PATH:/path/to/lsnrctl
(將/path/to/lsnrctl
替換為實際路徑,如/u01/app/oracle/product/19.0.0/dbhome_1/bin
);source ~/.bashrc
;/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl
。原因:當前用戶無執行lsnrctl的權限。
解決方法:
sudo lsnrctl <command>
(如sudo lsnrctl start
);dba
組:sudo usermod -aG dba $USER
,然后重新登錄。原因:lsnrctl是Oracle工具,未安裝Oracle數據庫軟件或未配置監聽器。
解決方法:
listener.ora
文件(位于$ORACLE_HOME/network/admin
)存在且配置正確,例如:LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))))
lsnrctl init
創建默認配置(若未配置)。原因:Oracle默認監聽端口(1521)已被其他應用占用。
解決方法:
sudo netstat -tulnp | grep 1521
或sudo lsof -i :1521
;sudo kill -9 <PID>
(替換為實際進程ID);listener.ora
文件,修改PORT
值為未使用的端口(如1522),保存后重啟監聽器:lsnrctl stop && lsnrctl start
。原因:ORACLE_HOME
(Oracle安裝目錄)、ORACLE_SID
(數據庫實例名)等環境變量未設置或錯誤。
解決方法:
~/.bashrc
文件,添加以下內容(替換為實際路徑和SID):export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
source ~/.bashrc
;echo $ORACLE_HOME
(應返回安裝路徑)、echo $ORACLE_SID
(應返回實例名)。原因:listener.ora
或tnsnames.ora
文件中存在語法錯誤(如括號不匹配、參數格式錯誤)。
解決方法:
vi
)打開文件,確認所有括號、引號匹配,參數格式正確;lsnrctl check
命令檢查配置文件語法;lsnrctl stop && lsnrctl start
使更改生效。原因:監聽器進程未運行。
解決方法:
lsnrctl start
;lsnrctl status
(若顯示“Listener is running”則表示成功);$ORACLE_HOME/network/log/listener.log
文件獲取詳細錯誤信息。原因:LSNRCTL與tnslsnr
進程之間的本地認證失?。ǔR娪诙嗑W卡環境或配置修改后)。
解決方法:
listener.ora
文件,使用IPC協議替代TCP:LISTENER = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = ANYTHING)) (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)))
listener.ora
中添加LOCAL_OS_AUTHENTICATION=OFF
;lsnrctl stop && lsnrctl start
。