【问题标题】:Oracle TNS problems?Oracle TNS 问题?
【发布时间】:2011-02-13 17:58:51
【问题描述】:

我有一个错误?我的 pl/Sql 开发人员说我的 oracle 数据库找不到服务描述符但是当我检查侦听器时出现此错误。

LSNRCTL> start
Starting tnslsnr: please wait...

Service OracleOraDb10g_home1TNSListener already running.
TNS-12560: TNS:protocol adapter error
 TNS-00530: Protocol adapter error



LSNRCTL> status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   32-bit Windows Error: 61: Unknown error

我的listener.ora的内容是

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = Oracle10g)
      (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
      (SID_NAME = ORCL)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  )

和 tnsnames.ora 的内容是这样的

# tnsnames.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

VMOBILE =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

VMOBILEMASTER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCL)
    )
  )

ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = SHARED)
      (SERVICE_NAME = ORCL)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

请给我今晚的最后期限。请帮忙。

【问题讨论】:

  • 请也发布您的 SQLNET.ORA 文件。这可能是问题的一部分。当此文件未正确配置时,我已经看到此错误。

标签: database oracle listener


【解决方案1】:

这可能是配置问题,这意味着我们很难远程解决。您需要检查的两件事是

  1. LISTENER.ORA 文件中的条目与TNSNAMES.ORA 文件匹配
  2. hosts 文件中的信息正确。

这是您尝试连接的本地数据库还是远程数据库?

编辑

hosts 文件(在 Windows 环境中)位于类似

的位置
C:\WINDOWS\system32\drivers\etc

显然,这取决于您的环境是如何设置的(不同的驱动器号或其他)。

编辑

您需要侦听器文件中的GLOBAL_DBNAME 来匹配tnsnsames 文件中的SERVICE_NAME,即ORCL

【讨论】:

  • 我已经尝试了主机文件并且设置正确。能不能帮忙看一下我上面贴的 TNSname.ora 文件和 LISTENER.ORA 是不是按顺序排列的。
【解决方案2】:

错误可能在listener.ora 文件中。尝试将(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) 行中的localhost 替换为运行侦听器的服务器的名称或IP 号。

【讨论】:

  • 我已经尝试过你的建议仍然有同样的错误。 LSNRCTL> start 正在启动 tnslsnr:请稍候... 服务 OracleOraDb10g_home1TNSListener 已在运行。 TNS-12560:TNS:协议适配器错误 TNS-00530:协议适配器错误
  • 如果你做一个lsnrctl reload会怎么样
【解决方案3】:

我会用 ipconfig 告诉你的 IP 地址替换 localhost。

【讨论】:

    【解决方案4】:

    很遗憾,此错误可能在多种情况下发生。

    1. Oracle 数据库服务(OracleServiceXE 或您使用的任何版本)实际上并未运行。
    2. 用户试图在非管理员帐户下运行 TNSListener 服务,阻止它注册关联的 Windows 服务。
    3. 由于机器上有多个 ORACLE_HOME 而发生冲突。
    4. 服务或配置设置没有问题,但 TNSListener 服务在 Windows 服务器重新启动之前不会成功启动。

    【讨论】:

      【解决方案5】:

      我今天通过从 cmd.exe 运行 LSNRCTL start 解决了这个错误消息,以“管理员身份”启动。

      我在 listener.ora 和 tnsnames.ora 中有“localhost”服务器。我也有 SQLNET.AUTHENTICATION_SERVICES = (NONE) 在 sql.ini

      在我尝试使用 LSNRCTL.EXE 之前,我没有在 Windows 服务列表中监听服务。 LSNRCTL start 来自管理员 cmd 的命令为我完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-25
        • 2012-08-24
        • 1970-01-01
        • 2015-12-12
        • 2017-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多