2020-07-28 00:50:30
Oracle数据库能通过sqlplus连接但1521端口未启用、telnet及PLSQL连接失败的问题,通常由配置文件错误导致监听程序无法正常运行引起,可通过修正配置并重新加载数据库解决。
核心问题在于Oracle的监听程序未正常运行,导致1521端口未启用。尽管sqlplus scott/tiger能成功连接(可能使用本地IPC或非标准端口),但外部工具(如telnet、PLSQL)依赖监听程序和标准端口,因此连接失败。
根本原因通常是listener.ora或tnsnames.ora配置文件存在错误,例如监听地址、端口或服务名配置不正确,导致监听程序无法启动或注册服务。

删除错误配置文件:进入Oracle配置文件目录(通常为$ORACLE_HOME/network/admin),删除listener.ora和tnsnames.ora文件。此操作可清除原有错误配置,为重新生成正确文件做准备。

打开Oracle Net Configuration Assistant工具,选择“监听程序配置”和“本地网络服务名配置”选项。
在监听程序配置中,指定监听名称(如LISTENER)和协议(通常为TCP),确保监听端口设置为1521,并填写正确的数据库主机IP地址。
在本地网络服务名配置中,输入服务名(与数据库SID一致),选择TCP协议,并指定主机IP和端口(1521),完成测试连接。
配置完成后,系统会自动生成新的listener.ora和tnsnames.ora文件。


若重新配置后仍无法连接,需检查数据库参数文件(如pfile或spfile)。若使用pfile,需将其转换为spfile以确保参数持久化。
找到pfile文件(通常位于$ORACLE_HOME/dbs目录,文件名格式为init<SID>.ora),记录其路径。
使用sqlplus /nolog连接数据库,输入conn /as sysdba以管理员身份登录,执行命令create spfile from pfile='路径/init<SID>.ora';生成spfile文件。

完成上述配置后,重启Oracle数据库服务(包括实例和监听程序)。可通过命令行执行lsnrctl stop和lsnrctl start停止并启动监听程序,再使用shutdown immediate和startup命令重启数据库实例。
重启后,验证1521端口是否启用(通过netstat -an | find "1521"或lsnrctl status命令),并尝试使用telnet和PLSQL连接数据库。

在重新配置监听程序和网络服务名时,务必确保填写的数据库IP地址、端口和服务名与实际环境一致,否则会导致连接失败。
若数据库使用动态注册(如RAC环境),需检查local_listener参数是否指向正确的监听程序。
修改参数文件前建议备份原文件,以防配置错误导致数据库无法启动。