Oracle (0x80004005)ORA-12154: TNS: 无法解析连接标识符
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3477445/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Oracle (0x80004005)ORA-12154: TNS:could not resolve the connect identifier
提问by ChickSentMeHighE
I'm trying to connect to an oracle db from an ASP classic application, however I keep running into the ORA-12154 error.
我正在尝试从 ASP 经典应用程序连接到 oracle 数据库,但是我一直遇到 ORA-12154 错误。
TNSNAMES.ORA is configured properly
DBSOURCE.A.B.com = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = C.D.B.com)(PORT = 1231)) ) (CONNECT_DATA = (SERVICE_NAME = DBSOURCE) ) )
I can TNSPING
C:\Documents and Settings\USERID.A>tnsping DBSOURCE
TNS Ping Utility for 32-bit Windows: Version 10.2.0.4.0 - Production on 09-MAR-2 011 09:12:31
Copyright (c) 1997, 2007, Oracle. All rights reserved.
Used parameter files: C:\oracle\product\10.2.0\client_1\NETWORK\ADMIN\sqlnet.ora
Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = C.D.B.com)(PORT = 1231))) (CONNECT_DATA = (SERVIC E_NAME = DBSOURCE))) OK (30 msec)
I can create an ODBC connection and I've tested the connection which is successful.
- I can connect to the oracle db through toad.
I've checked my sqlnet.ora file
NAMES.DEFAULT_DOMAIN = A.B.com
SQLNET.AUTHENTICATION_SERVICES= (NONE)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
I've also checked that the TNSNAMES.ORA as one of my system paths.
I can connect to the DB with SQLPLUS
TNSNAMES.ORA 配置正确
DBSOURCE.ABcom = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = CDBcom)(PORT = 1231)) ) (CONNECT_DATA = (SERVICE_NAME = DBSOURCE)) )
我可以 TNSPING
C:\Documents and Settings\USERID.A>tnsping DBSOURCE
适用于 32 位 Windows 的 TNS Ping 实用程序:版本 10.2.0.4.0 - 生产于 09-MAR-2 011 09:12:31
版权所有 (c) 1997、2007,甲骨文。版权所有。
使用的参数文件:C:\oracle\product\10.2.0\client_1\NETWORK\ADMIN\sqlnet.ora
使用 TNSNAMES 适配器解析别名 Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = CDBcom)(PORT = 1231))) (CONNECT_DATA = (SERVIC E_NAME = DBSOURCE))) OK (30毫秒)
我可以创建一个 ODBC 连接并且我已经测试了成功的连接。
- 我可以通过toad连接到oracle db。
我检查了我的 sqlnet.ora 文件
NAMES.DEFAULT_DOMAIN = ABcom
SQLNET.AUTHENTICATION_SERVICES=(无)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
我还检查了 TNSNAMES.ORA 作为我的系统路径之一。
我可以使用 SQLPLUS 连接到数据库
Here is the code that throws the error
这是引发错误的代码
dim CnnStr
Set Cnn = Server.CreateObject("ADODB.Connection")
CnnStr="Provider=MSDAORA.1;Password=pass;User ID=user;Data Source=DBSOURCE"
Cnn.Open CnnStr
I am running windows XP Pro 32bit SP3
我正在运行 Windows XP Pro 32 位 SP3
I've tested this on a co-workers machine and the asp app has no issues, am I missing a configuration somewhere or did I mess up my config?
我已经在同事的机器上对此进行了测试,并且 asp 应用程序没有问题,是我在某处丢失了配置还是我弄乱了配置?
Thanks for the help everyone!
感谢大家的帮助!
采纳答案by Derick Schoonbee
It seems all the settings have been checked but here is my suggestions for some trouble shooting:
似乎所有设置都已检查,但这里是我的一些故障排除建议:
- How about restrictions on the account IIS is running under? Does it have the file permissions to read the TNSNAMES? Have you tried to give the user more rights. Even run IIS with Local As System Account? Remember to put it back the way it was.
- You are sure there is not 3rd party app such anti virus or firewall that could influence / block access. (Disable them to test but do not forget to re-enable :)
- 对运行 IIS 的帐户的限制如何?它是否具有读取 TNSNAMES 的文件权限?你有没有尝试给用户更多的权限。甚至使用本地作为系统帐户运行 IIS?记得把它放回原来的样子。
- 您确定没有可能影响/阻止访问的第 3 方应用程序,例如防病毒或防火墙。(禁用它们进行测试,但不要忘记重新启用:)
(What did you finally do to solve it?)
(你最终做了什么来解决它?)
回答by APC
"this works on a co-worker machine but not mine."
“这适用于同事的机器,但不适用于我的。”
ORA-12154 is usually a configuration issue, and it would certainly seem to be so in your case. The short answer is to compare your machine with your colleague's one and figure out what the difference is.
ORA-12154 通常是配置问题,在您的情况下肯定是这样。简短的回答是将您的机器与您同事的机器进行比较,并找出不同之处。
Things to check include:
要检查的事项包括:
- the TNANAMES.ORA file
- the SQLNET.ORA file
- the LISTENER.ORA file (if you're using a local database)
- TNANAMES.ORA 文件
- SQLNET.ORA 文件
- LISTENER.ORA 文件(如果您使用的是本地数据库)
回答by Klas Lindb?ck
Do you have multiple Oracle homes? Check that IIS doesn't point to the other ORA_HOME (and thereby not finding your tnsnames.ora entry). I'm not very familiar with IIS configuration, so I would test this by adding the TNS entry to all tnsnames.ora on my PC.
您有多个 Oracle 主目录吗?检查 IIS 是否没有指向另一个 ORA_HOME(从而没有找到您的 tnsnames.ora 条目)。我对 IIS 配置不是很熟悉,所以我会通过将 TNS 条目添加到我 PC 上的所有 tnsnames.ora 来测试这一点。
回答by sunil
If you are running a 64-bit OS and oracle 10 try installing all the patches for oracle. Something similar happened to me, SQL plus and all else worked, except my .NET program. I was running a .Net program out of the "Program files (x86)" folder. Installing patches fixed it.
如果您运行的是 64 位操作系统和 oracle 10,请尝试安装 oracle 的所有补丁。类似的事情发生在我身上,SQL plus 和其他所有工作,除了我的 .NET 程序。我正在从“Program files (x86)”文件夹中运行一个 .Net 程序。安装补丁修复了它。
回答by Andy Finkenstadt
The likely problem is the lack of read permission upon the Oracle directories by the User IIS is running-as.
可能的问题是用户 IIS is running-as 缺乏对 Oracle 目录的读取权限。
As @Derick says, temporarilyset the permissions wide-open on the $ORACLE_HOME directory (Everyone = Full Control), restart IIS, and test. When that works, give the IIS User read permission against that directory.
正如@Derick 所说,暂时将 $ORACLE_HOME 目录上的权限设置为全开(Everyone = Full Control),重新启动 IIS 并进行测试。如果可行,请授予 IIS 用户对该目录的读取权限。
You can also confirm this issue using Process Monitor from Microsoft SysInternals, and seeing the failure message during the CreateFile(...) API call to open the DLLs or read the TNSNAMES.ORA file. Given the way temporary files work when selecting through cursors, you may also need to give the IIS user write permissions into some directories.
您还可以使用Microsoft SysInternals 的 Process Monitor确认此问题,并在 CreateFile(...) API 调用期间查看失败消息以打开 DLL 或读取 TNSNAMES.ORA 文件。考虑到通过游标进行选择时临时文件的工作方式,您可能还需要授予 IIS 用户对某些目录的写入权限。
回答by Bryan
I had the similar problem and found a simple solution. You don't have to modify any config files. Hope this can help you:
我遇到了类似的问题,并找到了一个简单的解决方案。您不必修改任何配置文件。希望这可以帮到你:
CREATE DATABASE LINK server2_db
CONNECT TO dbuser IDENTIFIED BY pwd USING
'(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = server_2)(PORT = port_num))
)
(CONNECT_DATA =
(SERVICE_NAME = server2_db)
)
)';
The solution is from here:http://oraclequirks.blogspot.com/2008/11/ora-12154-tnscould-not-resolve-service.html
解决方案来自这里:http: //oraclequirks.blogspot.com/2008/11/ora-12154-tnscould-not-resolve-service.html
回答by DCookie
Try setting the value of the environment variable TNS_ADMIN on the machine with the problem to /network/admin (or wherever your tnsnames.ora file lives) and see if that helps.
尝试将有问题的机器上的环境变量 TNS_ADMIN 的值设置为 /network/admin(或 tnsnames.ora 文件所在的任何位置),看看是否有帮助。