在进行数据库开发的时候,通常需要使用PLSQL Developer开发工具连接Oralce数据库,在进行连接时,经常性的会提示TNS-12541:TNS:no listener(没有监听),从而导致PLSQL Developer 无法连接到数据库实例,那么通过本文对造成该问题的常见原因进行分析及如何解决。

        一、监听程序未启动

                1.诊断问题:在服务器端,执行lsnrctl status 命令,检查监听是否已启动

.......>lsnrctl status
LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 09-9月 -2023 20:43:48
Copyright (c) 1991, 2010, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=服务器主机地址)(PORT=1521)))
TNS-12541:TNS:no listenner
  TNS-12560:TNS:protocol adapter error
    TNS-00511:no listenner
........

                若执行上述命令后,出现  TNS-12541:TNS:no listenner、TNS-12560:TNS:protocol adapter error  、 TNS-00511:no listenner则表示监听未启动

                2.启动监听:在服务器端,执行lsnrctl start命令回车,等待完成监听的启动

.........>lsnrctl start
   ........
   ........
   The command completed successfully

                若执行上述命令后,出现 执行结果中出现 The command completed successfully信息时,表示监听启动完成

       二、客户端监听端口号与服务端监听端口号不一致

            当在服务端执行lsnrctl status命令,执行结果为监听是正常启动的,但数据库实例还是无法连接,这时则需要检查客户端配置文件和监听器服务器端配置文件中配置的监听端口是否一致。

           listener.ora:该文件为服务端监听配置文件

           tnsnames.ora:该文件为客户端配置文件

           上述两个文件默认存储在%ORACLE_HOME%/NETWORK\ADMIN目录下

 listener.ora文件内容如下

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = F:\app\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:F:\app\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = 数据库服务器按照根目录

 tnsnames.ora文件如下

数据库实例名 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = 数据库实例)
    )
  )
LISTENER_数据库实例名 =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

   此时需要检查listener.ora配置文件中LISTENER =.... 和tnsnames.ora文件中LISTENER_数据库实例名 =.....配置的端口号,若不一致则手动改为一致,然后停用监听、停用数据库服务再重启,若不重启可能更改的配置不生效

        三、通常在数据库连接时提示没有监听,处理上述原因外,可能还存在以下原因,在具体遇到时,需要根据实际情况进行实际分析并解决

        1.客户端指定的数据库服务器目标主机IP地址有误

        2.客户端指定的数据库实例名存在有误

        3.客户端指定的端口有误

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐