Oracle(0x80004005)ORA-12154:TNS:无法解析连接标识符

时间:2010-08-13 13:49:32

标签: oracle asp-classic odbc database-connection ora-12154

我正在尝试从ASP经典应用程序连接到oracle db,但是我一直遇到ORA-12154错误。

  1. 正确配置TNSNAMES.ORA

    DBSOURCE.A.B.com = (DESCRIPTION = (ADDRESS_LIST =   (ADDRESS =(PROTOCOL = TCP)(HOST = C.D.B.com)(PORT = 1231)) ) (CONNECT_DATA =   (SERVICE_NAME = DBSOURCE) ) )

  2. 我可以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,Oracle。保留所有权利。

    使用过的参数文件: C:\ ORACLE \产品\ 10.2.0 \的Client_1 \ NETWORK \ ADMIN \ SQLNET.ORA

    使用TNSNAMES适配器来解析别名 试图联系(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP) (HOST = C.D.B.com)(PORT = 1231)))(CONNECT_DATA =(SERVIC E_NAME = DBSOURCE))) 好的(30毫秒)

  3. 我可以创建一个ODBC连接,并且我已经测试了成功的连接。

  4. 我可以通过toad连接到oracle db。
  5. 我已经检查了我的sqlnet.ora文件

    NAMES.DEFAULT_DOMAIN = A.B.com

    SQLNET.AUTHENTICATION_SERVICES =(NONE)

    NAMES.DIRECTORY_PATH =(TNSNAMES,EZCONNECT)

  6. 我还检查过TNSNAMES.ORA是我的系统路径之一。

  7. 我可以使用SQLPLUS

  8. 连接到数据库

    以下是抛出错误的代码

    dim CnnStr
    
    Set Cnn = Server.CreateObject("ADODB.Connection")
    
    CnnStr="Provider=MSDAORA.1;Password=pass;User ID=user;Data Source=DBSOURCE"
    
    Cnn.Open CnnStr
    

    我正在运行Windows XP Pro 32bit SP3

    我已经在同事机器上测试了这个并且asp应用程序没有问题,我在某处错过了配置还是搞砸了我的配置?

    感谢大家的帮助!

7 个答案:

答案 0 :(得分:4)

似乎已经检查了所有设置,但这是我对一些故障排除的建议:

  • 如何对IIS运行的帐户进行限制?它是否具有读取TNSNAMES的文件权限?您是否尝试过为用户提供更多权限。甚至使用Local As System帐户运行IIS?记得把它放回原处。
  • 您确定没有可能影响/阻止访问的第三方应用程序,如防病毒或防火墙。 (禁用它们进行测试,但不要忘记重新启用:)

(你最后做了什么来解决它?)

答案 1 :(得分:2)

  

“这适用于同事机器,但是   不是我的。“

ORA-12154通常是一个配置问题,在你的情况下肯定会是这样。简短的回答是将您的机器与您的同事进行比较,并找出其中的差异。

要检查的内容包括:

  • TNANAMES.ORA文件
  • SQLNET.ORA文件
  • LISTENER.ORA文件(如果您使用的是本地数据库)

答案 2 :(得分:2)

您有多个Oracle家庭吗?检查IIS是否指向其他ORA_HOME(从而找不到您的tnsnames.ora条目)。 我对IIS配置不是很熟悉,所以我会通过在我的电脑上为所有tnsnames.ora添加TNS条目来测试它。

答案 3 :(得分:1)

如果您正在运行64位操作系统并且oracle 10尝试安装oracle的所有补丁。 类似的事情发生在我身上,SQL plus和其他所有工作,除了我的.NET程序。 我在“Program files(x86)”文件夹中运行.Net程序。安装补丁修复了它。

答案 4 :(得分:1)

可能的问题是用户IIS正在运行的Oracle目录缺乏读取权限。

正如@Derick所说,暂时在$ ORACLE_HOME目录(Everyone =完全控制)上设置权限全开,重新启动IIS并进行测试。如果有效,请为IIS用户授予对该目录的读取权限。

您还可以使用Process Monitor from Microsoft SysInternals确认此问题,并在CreateFile(...)API调用期间查看失败消息以打开DLL或读取TNSNAMES.ORA文件。考虑到通过游标选择时临时文件的工作方式,您可能还需要授予IIS用户对某些目录的写权限。

答案 5 :(得分:0)

尝试将问题机器上的环境变量TNS_ADMIN的值设置为/ network / admin(或者tnsnames.ora文件所在的位置),看看是否有帮助。

答案 6 :(得分:0)

我遇到了类似的问题并找到了一个简单的解决方案。您不必修改任何配置文件。希望这可以帮到你:

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)
   )
 )';

解决方案来自:http://oraclequirks.blogspot.com/2008/11/ora-12154-tnscould-not-resolve-service.html