确保Ubuntu系统与Oracle数据库服务器之间的网络连接正常,使用ping命令测试服务器IP或域名:
ping <数据库服务器IP>
若无法连通,需排查网络配置(如IP、子网掩码、网关)或防火墙设置。
检查数据库实例状态:使用sqlplus以sysdba身份登录,执行以下命令查看实例状态:
sqlplus / as sysdba
SQL> SELECT instance_name, status FROM v$instance;
若状态为DOWN,需启动实例:SQL> STARTUP;
检查监听器状态:使用lsnrctl命令查看监听器是否运行:
lsnrctl status
若未运行,启动监听器:lsnrctl start;若监听器配置错误,修改$ORACLE_HOME/network/admin/listener.ora文件后重启监听器。
若从Ubuntu客户端连接远程Oracle数据库,需安装Oracle Instant Client并配置环境变量:
sudo apt-get install libaio1 alien
basic、sqlplus包(如instantclient-basic-linux.x64-23.1.0.0.0.zip),解压后配置环境变量:sudo sh -c "echo /opt/oracle/instantclient_23_1 > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig
echo 'export ORACLE_HOME=/opt/oracle/instantclient_23_1' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH' >> ~/.bashrc
echo 'export PATH=$ORACLE_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
$ORACLE_HOME/network/admin目录下创建tnsnames.ora文件,添加数据库连接信息:ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 数据库服务器IP)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 数据库服务名)
)
)
测试连接:sqlplus 用户名/密码@ORCL。确保Ubuntu防火墙(ufw)或服务器防火墙允许Oracle默认端口(1521)通过:
sudo ufw allow 1521/tcp
sudo ufw reload
若使用iptables,添加规则:sudo iptables -A INPUT -p tcp --dport 1521 -j ACCEPT。
lsnrctl status并确认listener.ora中的端口配置。tnsnames.ora中的SERVICE_NAME与数据库实际服务名不一致,修改tnsnames.ora或使用lsnrctl status查看正确服务名。$ORACLE_HOME/network/admin/listener.ora中的MAX_UTILIZATION参数,或重启数据库释放进程。使用sqlplus命令测试连接,确保存在语法错误:
sqlplus 用户名/密码@TNS_ENTRY
(TNS_ENTRY为tnsnames.ora中配置的连接名,如ORCL)
通过以上步骤,可逐步排查并解决Ubuntu系统下Oracle数据库的连接问题。若问题仍未解决,建议查看Oracle官方日志文件($ORACLE_HOME/diag/rdbms/数据库名/实例名/trace/alert_实例名.log)获取详细错误信息。