确保Ubuntu系统与Oracle数据库服务器之间的网络连通性正常,使用ping <服务器IP>命令测试连接。若无法ping通,需排查网络配置、路由器或防火墙问题(如服务器IP是否正确、网络线路是否故障)。
ps -ef | grep ora_*,确认Oracle数据库进程(如ora_pmon_<SID>、ora_dbw0_<SID>)正在运行。若未运行,使用sqlplus /nolog登录并执行startup命令启动数据库。lsnrctl status,查看监听器是否处于“RUNNING”状态,且监听的端口(默认1521)正确。若未启动,使用lsnrctl start启动监听器;若启动失败,需检查listener.ora文件(位于$ORACLE_HOME/network/admin)中的主机名、端口配置是否正确。若通过客户端连接,需安装Oracle Instant Client并配置环境变量:
/opt/oracle/instantclient_19_20)。~/.bashrc文件,添加以下内容(替换为实际路径):export ORACLE_HOME=/opt/oracle/instantclient_19_20
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH
执行source ~/.bashrc使变量生效。确保tnsnames.ora文件(位于$ORACLE_HOME/network/admin)中的连接信息准确,格式如下:
<连接别名> =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <服务器IP>)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <数据库服务名>)
)
)
重点检查HOST(服务器IP)、PORT(端口)、SERVICE_NAME(服务名)是否与数据库实际配置一致。
sqlplus / as sysdba登录数据库,执行SELECT username, account_status FROM dba_users WHERE username = '<用户名>';,确认用户状态为“OPEN”。若未授权,执行GRANT CONNECT, RESOURCE TO <用户名>;授予连接权限。sudo ufw allow 1521/tcp允许Oracle端口通过,再执行sudo ufw reload生效。iptables -A INPUT -p tcp --dport 1521 -j ACCEPT),并保存规则。若数据库因归档日志满无法连接,需清理归档文件:
rman target /
CROSSCHECK ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE - 7'; # 删除7天前的归档
EXIT;
若以上步骤无法解决,查看Oracle告警日志(位于$ORACLE_HOME/diag/rdbms/<数据库名>/<实例名>/trace/alert_<实例名>.log),通过日志中的错误代码(如ORA-12541、ORA-12514)进一步定位问题。例如:
tnsnames.ora或listener.ora配置)。