8

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

  1. TNSNAMES.ORA 配置正确

    DBSOURCE.ABcom = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = CDBcom)(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,甲骨文。版权所有。

    使用的参数文件: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毫秒)

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

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

    NAMES.DEFAULT_DOMAIN = ABcom

    SQLNET.AUTHENTICATION_SERVICES=(无)

    NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

  6. 我还检查了 TNSNAMES.ORA 作为我的系统路径之一。

  7. 我可以使用 SQLPLUS 连接到数据库

这是引发错误的代码

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 应用程序没有问题,是我在某处缺少配置还是弄乱了我的配置?

感谢大家的帮助!

4

7 回答 7

4

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

  • 对运行 IIS 的帐户的限制如何?它是否具有读取 TNSNAMES 的文件权限?您是否尝试过赋予用户更多权限。甚至使用本地系统帐户运行 IIS?记得把它放回原来的样子。
  • 您确定没有可能影响/阻止访问的 3rd 方应用程序,例如防病毒或防火墙。(禁用它们进行测试,但不要忘记重新启用 :)

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

于 2011-03-14T19:06:13.543 回答
2

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

ORA-12154 通常是一个配置问题,在您的情况下肯定是这样。简短的回答是将您的机器与您同事的机器进行比较,然后找出不同之处。

要检查的内容包括:

  • TNANAMES.ORA 文件
  • SQLNET.ORA 文件
  • LISTENER.ORA 文件(如果您使用的是本地数据库)
于 2010-08-13T13:55:49.717 回答
2

您有多个 Oracle 主页吗?检查 IIS 是否未指向其他 ORA_HOME(因此未找到您的 tnsnames.ora 条目)。我对 IIS 配置不是很熟悉,所以我会通过将 TNS 条目添加到我 PC 上的所有 tnsnames.ora 来测试这一点。

于 2011-03-10T01:09:00.263 回答
1

可能的问题是用户 IIS 运行时缺少对 Oracle 目录的读取权限。

正如@Derick 所说,暂时在 $ORACLE_HOME 目录(每个人 = 完全控制)上完全打开权限,重新启动 IIS,然后进行测试。如果可行,请授予 IIS 用户对该目录的读取权限。

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

于 2011-03-14T19:48:07.263 回答
1

如果您运行的是 64 位操作系统和 oracle 10,请尝试为 oracle 安装所有补丁。类似的事情发生在我身上,除了我的 .NET 程序之外,SQL plus 和其他一切都有效。我正在从“程序文件(x86)”文件夹中运行一个 .Net 程序。安装补丁修复了它。

于 2010-08-18T20:55:53.930 回答
0

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

于 2010-08-13T14:13:41.280 回答
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

于 2014-09-05T13:53:37.620 回答