確保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配置)。