请允许我在这篇文章前言说我知道这是一个常见的错误代码,并且当它尝试连接到Oracle数据库时,它会出现在Crystal Reports中,甚至特别是连接到11gR2的CR08也有很好的记录。互联网。
我几天来一直在进行故障排除,并尝试过(并在帖子中列出)几乎所有内容,这就是为什么我决定为我的案例创建一个新帖子。
我没有与计算机技术相关的教育,并且对SQL或Oracle的经验很少,因此阅读文档时有时会感到沮丧,这些文档假设有行话知识,因为我不断在谷歌上搜索什么意思。我对该主题的所有知识都归功于此问题的故障排除。
PATH 系统变量指向:
C:\ oraclexe \产品\ 11.2.0 \的Client_1 \ BIN; C:\ oraclexe \应用\ ORACLE \产品\ 11.2.0 \服务器\ BIN
TNS_ADMIN 系统变量指向:
C:\ oraclexe \应用\ ORACLE \产品\ 11.2.0 \服务器\网络\ ADMIN
TNS_NAMES 系统变量指向:
C:\ oraclexe \应用\ ORACLE \产品\ 11.2.0 \服务器\网络\ ADMIN
C:\ oraclexe是Oracle Home
我想做什么?/问题
我需要Crystal Reports才能成功连接到同一台计算机上托管的Oracle数据库。在我建立连接后,我可以继续正常的工作范围。
我正在尝试按照数据库>的路径连接到数据库。数据库专家>创建新连接> OLE DB(ADO)> Microsoft OLE DB Provider for Oracle。
然后我输入服务为" xe",用户ID为" system",密码为"密码" (我会写好像这是本帖其余部分的系统用户密码,它是一个随机生成的字母数字字符串)。我收到了错误:ORA-12154。
经过一些故障排除后,我能够清除此错误,而是抛出错误:ORA-12541我解释了我是如何到达下面的。
排除故障
我的第一个想法是检查tnsnames.ora是否确实存在且配置正确。我在目录中:
" C:\ oraclexe \产品\ 11.2.0 \的Client_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)
)
)
默认情况下排在前3位,我添加了最后一位。
接下来检查我的 sqlnet.ora 和 listener.ora 文件,这里分别是:
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
最初这没有NAMES.DIRECTORY_PATH,我添加了它。
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"更改HOST变量外,自安装以来未对此进行修改。至" 127.0.0.1",从底部开始的第5行。
此时我开始失去希望,并根据另一位用户在另一篇帖子上发表的评论,我决定接下来在我的磁盘上搜索tnsnames.ora的所有实例
我找到了一个" TNSNAMES.ora"在我的client_1 \ NETWORK \ ADMIN目录中,并更新它以匹配服务器的TNSNAMES.ora。在此之前不包含任何条目,只包含安装的注释。
这会在ORA-12154的确切位置出现不同的错误,但它现在给出了错误ORA-12541,TNS:没有听众。
这很奇怪,因为我可以在CMD中执行"tnsping system_xe"而没有任何问题(当ORA-12154是抛出的错误代码时我也能够这样做。)
我决定运行" lsnrctl stat"来自Documents and Settings> Keaga(我的用户)并被退回with these results.显然,这些结果表明我的问题出在"听众"。
所以,我开始熟悉并决定在我的C:\上搜索LISTENER.ora的所有实例,就像我之前使用tnsnames一样。
有2个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
经过一些搜索后,我找到了一个旧帖子,有人通过更改" 127.0.0.1"来解决此错误。 to" localhost"在他的listener.ora和tnsnames.ora文件中设置HOST参数时。在对我的客户端和服务器安装中的文件执行此操作后,我再次尝试连接并在同一步骤中显示另一个错误,ORA-12514:
在另一个旧的Stack Overflow帖子中,Brad Rippe谈到了同样的问题,而他的修复方法是确保在tnsnames.ora中找到的#34; SERVICE_NAME"是数据库中的有效名称。我决定先试试这个。
然而,当我尝试打开SQL Developer时,我在尝试连接时也收到了ORA-12514。 " tnsping system_xe"但是还是可以的。
经过一些令人沮丧的麻烦后,我通过这一步,通过添加到SID_LIST为" xe"创建一个新条目,SQLPlus现在能够连接到数据库,但SQL Developer现在抛出ORA-12505尝试连接时,Crystal Reports在尝试连接时抛出ORA-12514。
答案 0 :(得分:0)
要修复我的侦听器问题(特别是Crystal Reports使用的一个),我编辑了我的客户端和服务器的listener.ora文件(注意它们在同一台机器上)来调用主机" localhost& #34;而不是" 127.0.0.1"。
这解决了我的问题并引起了我的另一个问题,我在上一次编辑中描述了"解决ORA-12514 / ORA-12505:"。我目前正在解决此问题。