首页 文章

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

提问于
浏览
8

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

  • TNSNAMES.ORA已正确配置

DBSOURCE.A.B.com =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = C.D.B.com)(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,Oracle . 版权所有 .

使用的参数文件:C:\ oracle \ product \ 10.2.0 \ client_1 \ NETWORK \ ADMIN \ sqlnet.ora

使用TNSNAMES适配器解析别名尝试联系(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 = A.B.com

SQLNET.AUTHENTICATION_SERVICES =(无)

NAMES.DIRECTORY_PATH =(TNSNAMES,EZCONNECT)

  • 我还检查过TNSNAMES.ORA作为我的系统路径之一 .

  • 我可以用SQLPLUS连接到DB

这是抛出错误的代码

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 回答

  • 2

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

    • 如何对IIS运行的帐户进行限制?它是否具有读取TNSNAMES的文件权限?您是否尝试过为用户提供更多权限 . 甚至使用Local As System帐户运行IIS?记得把它放回去 .

    • 您确定没有可能影响/阻止访问的第三方应用程序,如防病毒或防火墙 . (禁用它们进行测试但不要忘记重新启用:)

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

  • 1

    “这适用于同事机器而不是我的机器 . ”

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

    要检查的内容包括:

    • TNANAMES.ORA文件

    • SQLNET.ORA文件

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

  • 1

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

  • 4

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

  • 0

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

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

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

  • 2

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

  • 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

相关问题