Crystal Reports在连接到Oracle 11g数据库时找不到侦听器(ORA-12541)

Crystal Reports在连接到Oracle 11g数据库时找不到侦听器(ORA-12541),oracle,oracle11g,crystal-reports,Oracle,Oracle11g,Crystal Reports,请允许我在这篇文章的前言中说,我知道这是一个常见的错误代码,当Crystal Reports试图连接到Oracle数据库时,它会出现在Crystal Reports中,即使是连接到11gR2的CR08在互联网上也有很好的记录 我已经独自排除故障好几天了,并且尝试了(并在帖子中列出)几乎所有的事情,这就是为什么我决定为我的案例创建一个新帖子的原因 我没有受过与计算机技术相关的教育,对SQL或Oracle的经验也很少,因此有时阅读假定掌握行话知识的文档会令人沮丧,因为我经常在谷歌上搜索事物的含义。我

请允许我在这篇文章的前言中说,我知道这是一个常见的错误代码,当Crystal Reports试图连接到Oracle数据库时,它会出现在Crystal Reports中,即使是连接到11gR2的CR08在互联网上也有很好的记录

我已经独自排除故障好几天了,并且尝试了(并在帖子中列出)几乎所有的事情,这就是为什么我决定为我的案例创建一个新帖子的原因

我没有受过与计算机技术相关的教育,对SQL或Oracle的经验也很少,因此有时阅读假定掌握行话知识的文档会令人沮丧,因为我经常在谷歌上搜索事物的含义。我对这个问题的所有了解都是由于这个问题的故障排除

设置
  • Windows 7 Professional SP1,64位安装
  • Oracle 11g第2版Express Edition数据库,32位安装
  • Oracle 11g第2版客户端,32位安装
  • 水晶报告2008。32位安装(评估版,它在生产环境中获得许可,但不在这里,这不会导致我的问题)
  • PATH系统变量指向:

    C:\oraclexe\product\11.2.0\client\u 1\bin; C:\oraclexe\app\oracle\product\11.2.0\server\bin

  • TNS_管理系统变量指向:

    C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN

  • TNS_名称系统变量指向:

    C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN

  • C:\oraclexe是Oracle的主页


我想做什么?/问题

我需要Crystal Reports成功连接到同一台计算机上托管的Oracle数据库。连接完成后,我可以继续我的正常工作范围

我正试图通过以下路径连接到数据库:数据库>数据库专家>创建新连接>OLE DB(ADO)>Microsoft OLE DB Provider for Oracle

然后,我将服务输入为“xe”,用户ID输入为“system”,密码输入为“password”(在本文的其余部分,我将把它当作系统用户的密码,它是随机生成的字母数字字符串)。我返回了一个错误:

在一些故障排除之后,我能够清除这个错误,而不是抛出错误:我在下面解释我是如何到达这里的


我已完成的故障排除

解决ORA-12154: 我的第一个想法是检查tnsnames.ora是否确实存在并且配置正确。我的在目录中:

“C:\oraclexe\product\11.2.0\client\u 1\NETWORK\ADMIN”以及listener.ora、sqlnet.ora和其他3个使用文件扩展名.bak的文件,并且似乎基于sqlnet.or和listener.ora,我不涉及这些文件

我的tnsnames.ora如下:

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = IEAS-KEAGAN)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

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

ORACLR_CONNECTION_DATA = 
  (DESCRIPTION = 
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) 
    ) 
    (CONNECT_DATA = 
      (SID = CLRExtProc) 
      (PRESENTATION = RO) 
    ) 
  ) 
system_xe =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )
默认情况下,前三名在那里,我添加了最后一名


接下来是检查我的sqlnet.oralistener.ora文件,它们分别是:

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
最初它没有名称。我添加了目录路径

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)
安装后未对其进行修改,只是将主机变量从“IEAS-KEAGAN”更改为“127.0.0.1”,从底部开始第5行

在这一点上,我开始失去希望,根据另一位用户在这里的另一篇帖子上的评论,我决定下一步在我的磁盘上搜索tnsnames.ora的所有实例

我在我的client\u 1\NETWORK\ADMIN目录中也找到了一个“TNSNAMES.ora”,并将其更新为与服务器的TNSNAMES.ora相匹配。在这一点之前,它不包含任何条目,只包含安装过程中的注释


解决ORA-12541: 这就产生了一个与ORA-12154不同的错误,它出现在正确的位置,但现在它给出了错误ORA-12541,TNS:no listener

这很奇怪,因为我可以在CMD中执行而没有问题(当抛出错误代码ORA-12154时,我也可以这样做)

我决定从Documents and Settings>Keaga(我的用户)运行“lsnrctl stat”,结果很明显返回了这些结果,表明我的问题出在“listener”上

所以,我从熟悉的地方开始,决定在我的C:\上搜索LISTENER.ora的所有实例,就像我以前对tnsnames所做的那样

有两个listener.ora文件,一个用于我的服务器安装,我已经在上面引用过,另一个位于我的client_1\NETWORK\ADMIN目录中,其中包含以下内容:

# listener.ora Network Configuration File: C:\oraclexe\product\11.2.0\client_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = C:\oraclexe
在进一步搜索之后,我找到了一篇旧文章,其中有人在listener.ora和tnsnames.ora文件中设置主机参数时,将“127.0.0.1”更改为“localhost”,从而解决了这个错误。对客户端和服务器安装中的文件执行此操作后,我再次尝试连接,但在同一步骤中出现另一个错误,即ORA-12514:


解决ORA-12514/ORA-12505: 在另一篇旧的Stack Overflow帖子中,Brad Rippe谈到了同样的问题,他的解决方案是确保在tnsnames.ora中找到的“SERVICE_NAME”在数据库中是一个有效的名称。我决定先试试这个

然而,当我试图打开SQLDeveloper时,我在尝试连接时也收到了ORA-12514。“tnsping系统”仍然有效,但是没问题


经过一些令人沮丧的故障排除后,我完成了这一步骤,通过添加到SID_列表中为“xe”创建一个新条目,SQLPlus现在能够连接到数据库,但是SQL Developer现在在尝试连接时抛出ORA-12505,Crystal Reports在尝试连接时抛出ORA-12514。

修复我的侦听器问题(特别是Crystal Reports使用的one Crystal Reports)我编辑了我的客户端和服务器的listener.ora文件(注意它们在同一台机器上),将主机称为“localhost”,而不是“127.0.0.1”

这解决了我的问题,并使我注意到我在las中描述的另一个问题