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
定位問題。