使用lsnrctl status命令确认监听器是否正在运行。若未启动,执行lsnrctl start启动监听器;若已启动但仍无法连接,可能需要重启监听器(lsnrctl stop→lsnrctl start)。
检查listener.ora文件(位于ORACLE_HOME/network/admin目录)的配置是否正确,重点确认以下内容:
HOST = localhost或具体IP)是否与服务器实际IP一致;1521)是否正确;SID_NAME)是否与数据库实例名匹配。使用ping <监听器IP>命令测试客户端与服务器之间的网络连接。若无法ping通,需检查:
ifconfig或ip a命令);确保防火墙允许监听器使用的端口(默认1521)通过:
sudo iptables -A INPUT -p tcp --dport 1521 -j ACCEPT;sudo firewall-cmd --add-port=1521/tcp --permanent→sudo firewall-cmd --reload;检查数据库实例是否正在运行:
sqlplus / as sysdba登录数据库;SELECT status FROM v$instance;,若状态为OPEN则表示实例正常;若为DOWN,需启动实例(STARTUP)。确保ORACLE_HOME(Oracle安装目录,如/u01/app/oracle/product/19c/dbhome_1)和PATH(包含$ORACLE_HOME/bin)环境变量已正确设置:
echo $ORACLE_HOME和echo $PATH检查;~/.bashrc或/etc/profile文件,添加:export ORACLE_HOME=/path/to/oracle/home
export PATH=$PATH:$ORACLE_HOME/bin
然后执行source ~/.bashrc使配置生效。ORACLE_HOME/network/log/listener.log(使用tail -f实时查看最新日志);ORACLE_HOME/diag/rdbms/<db_name>/<instance_name>/trace/alert_<instance_name>.log。若系统启用SELinux,可能阻止Oracle网络连接。可临时禁用SELinux测试:
sudo setenforce 0
若问题解决,需调整SELinux策略(如setsebool -P oracle_db_enabled 1)或永久禁用(修改/etc/selinux/config中的SELINUX=disabled)。
使用tnsping <服务名>命令(服务名来自tnsnames.ora文件,位于ORACLE_HOME/network/admin目录)测试TNS名称解析是否正常。若解析失败,需检查tnsnames.ora文件中的服务名、主机名、端口号是否正确。
oracle组(执行sudo usermod -a -G oracle <username>添加);sudo或切换到oracle用户执行lsnrctl命令(如sudo -u oracle lsnrctl start)。