确保Ubuntu系统与Oracle数据库服务器之间的网络连接正常,使用ping <服务器IP>命令测试连通性。若无法ping通,需排查网络配置(如防火墙、路由)或服务器IP是否正确。
在数据库服务器上,使用ps -ef | grep ora_*命令检查Oracle数据库实例进程是否运行。若未运行,切换至Oracle用户(su - oracle),使用sqlplus /nolog登录,再执行startup命令启动数据库实例。
Oracle监听器负责接收客户端连接请求,需确保其配置正确且处于运行状态:
$ORACLE_HOME/network/admin/listener.ora文件,检查HOST(服务器IP或主机名)、PORT(默认1521)和SID_NAME(数据库实例名,可通过lsnrctl status查看)是否正确。lsnrctl start命令启动监听器,再用lsnrctl status确认监听器状态(显示“RUNNING”表示正常)。若通过Ubuntu本地客户端连接远程Oracle数据库,需安装Oracle Instant Client并配置环境变量:
/opt/oracle/instantclient_19_XX)。~/.bashrc文件,添加以下内容(替换为实际路径):export ORACLE_HOME=/opt/oracle/instantclient_19_XX
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME:$PATH
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 # 解决中文乱码(可选)
运行source ~/.bashrc使变量生效。TNSNAMES.ORA文件存储了数据库连接描述符,需确保其配置与数据库服务器一致:
$ORACLE_HOME/network/admin/(客户端)或数据库服务器的$ORACLE_HOME/network/admin/目录下。ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl) # 或SID(需与数据库实例一致)
)
)
替换HOST(服务器IP)、PORT(监听端口)、SERVICE_NAME(数据库服务名,可通过lsnrctl status查看)为实际值。sqlplus username/password@TNS_ENTRY命令测试连接(如sqlplus scott/tiger@ORCL),确保账号密码正确。sqlplus / as sysdba登录数据库,执行grant connect, resource to username;授予连接和资源权限。listener.ora文件中的SID_NAME,使其与数据库实例名一致(可通过lsnrctl status查看实例名),然后重启监听器(lsnrctl restart)。$ORACLE_HOME/network/admin/sqlnet.ora文件,将SQLNET.AUTHENTICATION_SERVICES=(NTS)改为SQLNET.AUTHENTICATION_SERVICES=(NONE)(适用于非Windows环境)。若Ubuntu或数据库服务器启用了防火墙,需放行Oracle监听端口(默认1521):
sudo ufw allow 1521/tcp放行端口。使用sqlplus命令测试连接,例如:
sqlplus username/password@TNS_ENTRY # 使用TNS名称连接
sqlplus username/password@//HOST:PORT/SERVICE_NAME # 使用EZCONNECT语法连接
若连接成功,将显示Oracle命令行提示符(SQL>)。
若数据库因归档日志满导致无法连接,需清理归档文件:
su - oracle
rman target /
crosscheck archivelog all; # 校验归档日志
delete noprompt expired archivelog all; # 删除过期归档
delete noprompt archivelog all completed before 'sysdate - 7'; # 删除7天前的归档
exit;
清理后重启数据库实例。